date_selectで:indexが使えない気がするので力業で逃げました
ActionViewのフォームヘルパーの多くは、:indexオプションを指定することで、複数のフォームを作成することができ、コントローラでは{index_value => {:key => value }なネストしたHashとして取り出すことができます。
しかし、date_selectでは:indexオプションが無視されてしまうため、クィックでダーティーでどうかと思う回避策をとっています。
例えばViewに
<%= text_field "person", "name", "index" => 1 %> <%= text_field "person", "name", "index" => 2 %>
と書くと
<input type="text" id="person_1_name" name="person[1][name]" value="<%= @person.name %>" /> <input type="text" id="person_2_name" name="person[2][name]" value="<%= @person.name %>" />
というHTML片が生成され、コントローラでは
def controller_action first_person = Person.new(params[1]) second_person = Person.new(params[2]) end
のように扱うことができます。
が、そんな中でdate_selectをはじめとする、日付フォームを生成するヘルパーでは:indexオプションが効きません。
Rails-1.1.2のソースでもやはり変わってないようでしたので、以下のような力業をapplication_helperに書いて逃げました。*1
def date_select( obj, method, options={} ) options = { :use_month_numbers => true }.merge( options ) res_html = super res_html.gsub!(/#{obj}/,"#{obj}[#{options[:index]}]") if options[:index] res_html end
我ながらかなり汚いです。。。
*1::use_month_numbers => trueは単なる趣味です。もっとグローバルな指定ってできるんでしたっけ?