我正在使用Rails 3.2。我有一个搜索表单,下面有单选按钮。它根据选择的单选按钮进行搜索。目前我认为这是:
= radio_button_tag(:ad_type, "free")
= label_tag(:ad_type_free, "free")
= radio_button_tag(:ad_type, "paid")
= label_tag(:ad_type_paid, "paid")
= radio_button_tag(:ad_type, "featured")
= label_tag(:ad_type_featured, "featured")
所以我的问题是这个,如何设置默认的单选按钮?我尝试过使用radio_button_tag(:ad_type, "free", :checked => true)
,但在提交表单后,它总是选择该单选按钮。我想要的是根据先前的请求选择值。我应该从url params获得价值吗?如果是这样,我如何设置初始默认值(如果没有先前的搜索)?非常感谢。
更新
我创建了一个帮助方法ad_type_selected?
def ad_type_selected?(ad_type)
selected_ad_type = params[:ad_type] || "free"
(selected_ad_type == ad_type) ? true : false
end
我认为我有这个:
= radio_button_tag(:ad_type, "free", :checked => ad_type_selected?("free"))
但是,单选按钮仍未被选中。检查日志,我看到第一次调用helper返回true,其他调用false,这就是我想要的。但问题是它仍然没有选择单选按钮。如果我检查输入标签,我只能看到checked属性设置为“checked”。
答案 0 :(得分:3)
我正在挖掘,但我刚刚遇到过这个问题。
<label class='checkbox-inline'>
<%= radio_button_tag :option, :user, true %>
Username
</label>
<label class='checkbox-inline'>
<%= radio_button_tag :option, :email, params[:option] == 'email' ? true : false %>
Email
</label>
<label class='checkbox-inline'>
<%= radio_button_tag :option, :name, params[:option] == 'name' ? true : false %>
Full Name
</label>
所以...这将默认设置第一个按钮(并且始终),但是如果选择了其他参数,它们将变为真。单选按钮将始终为您选择最后一个true
按钮,因此只要您将默认选项放在列表中,设置为true,其余设置为:
params[:name_of_your_buttons] == 'button_value' ? true : false
答案 1 :(得分:2)
显然,为所有单选按钮添加checked属性会导致始终选择最后一个单选按钮。所以我所做的只是在params与单选按钮匹配时添加一个checked属性。
因此,对于我的示例,我只是使用帮助器生成相应的单选按钮,如下所示:
def ad_type_radio_button(ad_type)
selected_ad_type = params[:ad_type] || "free"
if selected_ad_type == ad_type
radio_button_tag(:ad_type, ad_type, :checked => true)
else
radio_button_tag(:ad_type, ad_type)
end
end
在我看来有这个:
= ad_type_radio_button("free")
我知道它远非优雅,但它现在表现正常。
答案 2 :(得分:0)
如果params [:ad_type]为零,则此代码段会将检查设置为false。否则,如果params [:ad_type]设置为true,它将设置为true。
radio_button_tag(:ad_type, "free", :checked => (params[:ad_type] == nil ? false : params[:ad_type]))
如果您还没有看到上面使用if / then / else的简写,那就是:
test-expression ? if_true_expression : if_false_expression
答案 3 :(得分:0)
根据docs,checked
不是选项哈希参数,它只是一个布尔值。
这没效果(至少在第4轨中):
= radio_button_tag(:ad_type, "free", :checked => ad_type_selected?("free"))
应该是:
= radio_button_tag(:ad_type, "free", ad_type_selected?("free"))