12

simple_form gem https://github.com/plataformatec/simple_formを使用していくつかの入力フィールドを作成しています。そのうちの 1 つは、次のようなラジオ ボタン グループです。

<%= f.input :due_date, :collection => ['Today', 'Tomorrow', 'In 3 Days'], :as => :radio %>

したがって、データベース「due_date」のこのフィールドは日付です。しかし、人々がその小さなカレンダーをクリックするのではなく、一般的にこれらの 3 つのオプションだけが必要であることを私たちは知っています。そして、ラジオボタンを使いたいです。しかし、この行の出力は、今送信ボタンを押すと、due_date パラメータにそこに記載されている値、つまり今日、明日、または 3 日後が含まれることを示しています。Today パーツの出力 HTML は次のとおりです。

<span>
<input class="radio optional" id="project_due_date_today" name="project[due_date]" type="radio" value="Today">
<label class="collection_radio" for="project_due_date_today">Today</label>
</span>

私が理想的に欲しいのは次のようなものです:

<%= f.input :due_date, :collection_to_params => [Date.today, Date.tomorrow, Date.today+3], :display_value => ['Today', 'Tomorrow', 'In 3 Days'], :as => :radio %>

したがって、ユーザーがいずれかをクリックして送信すると、実際に ISO 日付がサーバーに送信されます。

何か案は?

ありがとう!

4

2 に答える 2

31
<%= f.input :due_date, 
:collection => [[Date.today, 'Today'], [Date.tomorrow, 'Tomorrow'], [Date.today+3, 'In 3 Days']], 
:label_method => :last, 
:value_method => :first, 
:as => :radio_buttons %>

したがって、配列の配列をコレクションハッシュに渡すことができます。次に、この入力のVALUEとこの入力の表示ラベルを指定するために渡すことができるオプションがさらに2つあり、それらは適切にlabel_methodおよびvalue_methodという名前になっています。メソッドという言葉は、ラベルまたは値を取得するために、問題のコレクションの個々のアイテムを呼び出すメソッドです。配列の配列では、array.firstが私の値であり、私のラベルの場合はarray.lastです。したがって、上記のコード

于 2011-09-21T11:07:52.407 に答える
2

これはNik So、すべてのコメントが適用された の回答から得たものです。

<%= f.input :due_date, 
collection: [['Today', Date.today], ['Tomorrow', Date.tomorrow], ['In 3 Days', Date.today+3]],
as: :radio_buttons %>
于 2016-04-18T12:03:03.857 に答える