Ajaxで3つのドロップダウンを連動させる。
例)都道府県、区市町村、大字

main.html.erb

	<%= f.select :pref_id, Pref.find(:all).collect.map { |i| [ i.name, i.id ] }, { :include_blank => true }, {:onChange => "document.getElementById('pref_value').value = options[selectedIndex].value;"} %>
	<%= observe_field("address_cond_pref_id", {:update => :city_list, :on => 'change', :url => {:controller => 'addresss', :action => :city_list}, :with => "'pref_id='+value"}) %>
	<%= observe_field("address_cond_pref_id", {:update => :vill_list, :on => 'change', :url => {:controller => 'addresss', :action => :vill_list}, :with => "'pref_id='+value"}) %>

	<div id="city_list">
	<%= f.select :city_id, City.find(:all).collect.map { |i| [ i.name, i.id ] }, { :include_blank => true } %>
	</div>
	<%= observe_field("address_cond_city_id", {:update => :vill_list, :on => 'change', :url => {:controller => 'addresss', :action => :vill_list}, :with => "'city_id='+value"}) %>

	<div id="vill_list">
	<%= f.select :vill_id, Vill.find(:all).collect.map { |i| [ i.name, i.id ] }, { :include_blank => true } %>
	</div>

city_list.html.erb

<select id="city_id" name="address_cond[city_id]">
	<option value=""></option>
<% for city in @city_list %>
<option value='<%=city.id%>'><%=city.name%></option>
<% end %>
</select> 
<%= observe_field(:city_id, {:update => :vill_list, :on => 'change', :url => {:controller => 'addresss', :action => :vill_list}, :with => "'city_id='+value+'&pref_id='+document.getElementById('pref_value').value"}) %>

vill_list.html.erb

<select id="vill_id" name="address_cond[vill_id]">
<option value=""></option>
<% for vill in @vill_list %>
<option value='<%=vill.id%>'><%=vill.name%></option>
<% end %>
</select>

mainの初期表示のときにcity_listとvill_listが表示されないので、予めmainに別コンポーネントでcityとvillを設置。
idとかnameはhtmlソースを確認しながら適当に…。
prefを変えたときにvillも変えたいのでcity_listと同じようなobserve_fieldを用意。
ごちゃごちゃと汚い感じのソースになってしまったけれど、なんとなく意図した通りに動いてるっぽい。
ドロップダウンは他の入力コンポーネントと違って色々と面倒なことに最近やっと気づいたので、これからは使用を控える方向にしていきたい。



RMagickで
126: 指定されたモジュールが見つかりません。 -
C:/ruby-1.8.6/lib/ruby/site_ruby/1.8/i386-msvcrt/RMagick2.so
こんなエラーが出たのだが原因がわからずライブラリを入れなおしたら治った。