想要rails simple_form单选按钮来显示不是值的文本

Nik*_* So 12 forms ruby-on-rails radio-button simple-form

我使用simple_form gem https://github.com/plataformatec/simple_form来创建一些输入字段; 其中一个是单选按钮组,如下所示:

<%= f.input :due_date, :collection => ['Today', 'Tomorrow', 'In 3 Days'], :as => :radio %>
Run Code Online (Sandbox Code Playgroud)

所以数据库"due_date"中的这个字段是一个Date.但是,我们知道通常人们只想要这三个选项,而不是让人们点击那个小日历.我确实想用单选按钮.但是这一行的输出表明,如果我现在点击提交按钮,则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>
Run Code Online (Sandbox Code Playgroud)

理想情况下我想要的是:

<%= f.input :due_date, :collection_to_params => [Date.today, Date.tomorrow, Date.today+3], :display_value => ['Today', 'Tomorrow', 'In 3 Days'], :as => :radio %>
Run Code Online (Sandbox Code Playgroud)

因此,当用户点击一个并提交时,我实际上会将一些ISO日期发送到服务器.

有任何想法吗?

谢谢!

Nik*_* So 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 %>
Run Code Online (Sandbox Code Playgroud)

因此,您可以将一个数组数组传递给集合哈希,然后可以传递另外两个选项来指定此输入的VALUE和此输入的可见标签,它们被正确命名为label_method和value_method.单词方法是什么,调用有问题的集合的单个项目以检索标签或值的方法.在数组的大小写中,array.first是我的值,如果是我的标签,则是array.last.因此上面的代码

  • 为什么不使用`['今天',Date.today]`没有不必要的参数,如`label_method`,`value_method`,它们分别默认为`first`和`last`? (16认同)
  • 如果Olexandr说的不明显,只需改变每个集合条目的顺序(即['Today',Date.today]而不是[Date.today,'Today']),现在你不需要指定:label_method和:value_method. (8认同)