Rails 4 - 将选项显示为单选按钮

3

我正在开发一个Rails 4应用程序,使用simple_form进行输入。有几个模型字段可以接受众所周知的答案或自由形式的答案。例如,对于一个字段fruit:string,我想显示"Apple""Banana""Other"。如果用户选择"Other",他们可以输入任何自由格式的文本。目前,我只能使用<%= f.input :fruit %>,然后出现一个空白文本框。是否可以显示单选按钮?我可以这样做:

<%= f.collection_radio_buttons :fruit, [["Apple", "Apple"], ["Banana", "Banana"]], :first, :last %>

但是这并不提供“其他”选项。目标是如果选择了“其他”,则记录“苹果”、“香蕉”或指定(输入的)值。

2个回答

1

Simple Form允许您在集合上使用as: :radio_buttons,如下所示。

<%= f.input :fruit, collection: ['apple', 'banana', 'other'], as: :radio_buttons %> 

请参见SimpleForm README文件中的 collection部分以获取有关集合输入的更多信息。

我的问题是关于如何让用户输入“其他”选项的数据,而不仅仅是提供三个选项。请重新阅读我的问题。 - LNI
简单来说,在这种情况下,您可能会使用jQuery来显示文本框。 - DVG

0
一个解决方案是在f.collection_radio_buttons之后跟着f.input,两者都使用相同的名称。然后,根据选定的单选按钮使用jquery或javascript有选择地启用f.input。为了使其工作,您可能还想添加一个['Other']['Other']选项。
编辑 也许可以尝试以下方式:
f.collection_radio_buttons :fruit, [['Apple','Apple'],['Orange','Orange'],['Other','Other']], :first, :last
f.text_field :fruit


$("input:radio[name='foo[fruit]']").change(function(){
  if($(this).val() == 'Other'){
    $("input:text[name='foo[fruit]']").show().prop( "disabled", false);
  }else{
    $("input:text[name='foo[fruit]']").hide().prop( "disabled", true );
  }});

因为它们具有相同的名称,Rails 将使用最后一个值(在此情况下为文本字段,如果启用的话),否则将使用所选的单选按钮。


这就是问题所在 - 这样的东西在Rails 4中如何工作?你能提供一个例子吗? - LNI
Rails 4 只会使用与该名称一起发送的最后一个值。使用 jQuery 更新了答案,并提供了一个示例。 - joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接