我正在开发一个Rails 4应用程序,使用simple_form进行输入。有几个模型字段可以采用众所周知的答案或自由形式的答案。例如,对于字段fruit:string
,我想显示"Apple"
,"Banana"
,"Other"
。如果用户选择"Other"
,则可以输入任何自由格式文本。目前,我所能做的就是使用<%= f.input :fruit %>
并显示一个空白文本框。是否可以显示单选按钮?我能做到
<%= f.collection_radio_buttons :fruit, [["Apple", "Apple"], ["Banana", "Banana"]], :first, :last %>
但是没有提供“其他”选项。如果选择“其他”,目标是记录“Apple”,“Banana”或指定的(键入的)值。
答案 0 :(得分:1)
简单表单允许我们as: :radio_buttons
集合,如此
<%= f.input :fruit, collection: ['apple', 'banana', 'other'], as: :radio_buttons %>
有关集合输入的详细信息,请参阅collection section of the SimpleForm README。
答案 1 :(得分:0)
一种解决方案是使f.collection_radio_buttons后跟f.input,两者都具有相同的名称。然后,使用jquery或javascript选择性地启用基于所选单选按钮的f.input。为此,您可能还需要添加[&#39;其他&#39;] [&#39;其他&#39;]选项。
EDIT 也许是这些方面的东西:
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将使用最后一个值(在这种情况下,如果启用了文本字段),否则它将使用所选的单选按钮。