TodoList: select のプルダウンメニューを修正2006年12月29日 09時56分20秒

http://localhost:3000/user/new で新しいユーザを追加しようとすると、例外が投げられる。_edit.rhtml にて、ユーザの所属先を変更できるようにしたためだ。

加えて、:selected を使えば、初期値として選ばれているのかと思ったがそうではなかったらしい。Seamonkey、Mozilla、Firefox で試してみたが結果は同じだった。三つで試したと言ってもレンダリングエンジンは一緒なのだが。他のブラウザは試せないので、調べていない。

流石にこれでは困るので、調べた。select は action_view/helpers/form_options_helper.rb にて定義されている。この関数の第一引数と第二引数が何のためだか良くわからない。name を作る目的の様だが、:name で別途指定することも出来るし。

兎に角、以下の様に app/views/user/_edit.rhtml に変更を加えた。


% cvs diff app/views/user/_edit.rhtml
--- app/views/user/_edit.rhtml  26 Dec 2006 04:10:32 -0000      1.5
+++ app/views/user/_edit.rhtml  26 Dec 2006 22:51:15 -0000
@@ -19,11 +19,11 @@
    <tr class="two_columns">
    <td class="prompt"><lable>Organization:</label></td>
    <td class="value">
-    <%= select :organization, :id,
-     Organization.find_all().map {|o| [ o.name, o.id ]},
-     {},
-     #{ :include_blank => true },
-     { :selected => User.find(@params[:id]).organization_id } %>
+    <%= select :user, :organization_id,
+     Organization.find(:all).map {|o| [ o.name, o.id ]},
+     { :include_blank => true },
+     {}
+     %>
    </td>
    </tr>

form_options_helper.rb を参考にしながら、第一引数と第二引数を変えてみたのだ。

この変更で、指定しても動作していなかった、:selected が初期値として選ばれる様になった。加えて、わざわざ、:selected を指定する必要もなくなったのである。随分と簡略化された。

前回次回