selectボックスとAjax

 mixi とかでプロフィールを入力すると、都道府県をselectボックスから選ぶとそのとなりの市郡selectボックスが変わります。mixiの場合はAjaxじゃないんだけど、RoRAjaxでやってみたくて調べてみました。

 とりあえず「Rails' Wiki - gdvfhfmb」この辺とか参考にしてみて、observe_fieldを使うんじゃないかとアタリをつけてみました。もちろん今回は、selectボックスで都道府県を選んだらというのが条件なので、:frequencyで監視時間を設定するようなやり方ではダメ。こういうときは、:onを使うことが判明しました。↓こんな感じ

<%= observe_field(:pref_id, {
  :update => :city_id,
  :on => 'change',
  :url => { :action => :cities }}) %>

pref_idというidを持つselectボックスで都道府県を選ぶと、city_idというidを持つタグにcitiesアクションの結果が流し込まれます。

で、実際pref_idで選んだ値をとってみようとすると、ここで行き詰まります。「Rails' Wiki - gdvfhfmb」に書いてある例では、ここでいうpref_idで選んだ値をどうやって取得するのか書いていないのですね。実は、pref_idで選んだ値は、@paramsキーになってしまっています。なので取得するのが大変なのです! これを解決するには以下のようにやればよいのでした。

<%= observe_field(:pref_id, {
  :update => :city_id,
  :on => 'change',
  :url => { :action => :cities },
  :with => "'pref_id'=+value"}) %>

これでめでたく@params["pref_id"]で値を取得できるようになるのでありました。