希望 rails simple_form 单选按钮显示不是值的文本

Posted

技术标签:

【中文标题】希望 rails simple_form 单选按钮显示不是值的文本【英文标题】:want rails simple_form radio button to display text that's not the value 【发布时间】:2011-11-21 19:37:13 【问题描述】:

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

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

所以数据库“due_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>

我想要的理想是这样的:

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

所以当用户点击一个并提交时,我实际上会收到一些 ISO 日期发送到服务器。

有什么想法吗?

谢谢!

【问题讨论】:

我没用过simple_form,但通常使用Rails 值得尝试一下哈希::collection =&gt; 'Today' =&gt; Date.today, 'Tomorrow' =&gt; Date.tomorrow, 'In 3 Days' =&gt; Date.today+3 嗨,Alex,感谢您的意见,我会记住这一点,但我找到了简单的答案。 小通知,有radio 已弃用,取而代之的是radio_buttons 【参考方案1】:
<%= 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 和此输入的可见标签,它们被正确命名为 label_method 和值方法。单词方法是,在相关集合的单个项目上调用什么方法来检索标签或值。在数组的情况下,array.first 是我的值,array.last 是我的标签。因此上面的代码

【讨论】:

为什么不使用['Today', Date.today]而不使用不必要的参数,例如label_methodvalue_method,默认分别为firstlast?! 如果 Olexandr 所说的内容不明显,只需颠倒每个集合条目的顺序(即 ['Today', Date.today] 而不是 [Date.today, 'Today'])和现在您不需要指定 :label_method 和 :value_method。 你也可以写:&lt;%= f.collection_radio_buttons :due_date, [[Date.today, 'Today'], [Date.tomorrow, 'Tomorrow'], [Date.today+3, 'In 3 Days']], :first, :last %&gt; 现在你还需要使用新语法as: :radio_buttons【参考方案2】:

这是我从Nik So 应用所有 cmets 的答案中得到的:

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

【讨论】:

以上是关于希望 rails simple_form 单选按钮显示不是值的文本的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5 simple_form 将单选按钮标记为必需,如果未填写则阻止提交表单

Rails simple_form - 是否可以只显示按钮标签的radio_buttons?

simple_form_for rails 单选按钮内联

simple_form 集合单选按钮

使用 simple_form、haml 和 jquery 基于单选按钮选择切换字段

将唯一 id 附加到 simple_form 生成的单选按钮输入,并将匹配值附加到关联标签