目标是使用特定链接传递特定的布尔值(true或false)。
我试过了:
<%= link_to "new test", new_test_path(:crazy => true) %>
网址: / tests / new?crazy = true
视图
<div class="field">
<%= f.radio_button :crazy, true %> True
<%= f.radio_button :crazy, false %> False
</div>
static_pages_controller
def home
@test = Test.new
...
end
但单击该链接时未选择任何单选按钮。
答案 0 :(得分:2)
我们无法从查询字符串中获取值作为布尔值。您将需要检查所有可能性或只是执行以下操作:
params[:crazy] == 'true'
但是,根据字符串长度,字符串比较总是很昂贵。所以,你应该尽量减少它。您可以检查Ismriv给出的集中式方法解决方案。
我想这对你最好:
您的链接:
<%= link_to "new test", new_test_path(:crazy => '1') %>
您的new
行动:
def new
@test = Test.new(:crazy => (params[:crazy] == '1'))
...
end
你的收音机:
<div class="field">
<%= f.radio_button :crazy, true %> True
<%= f.radio_button :crazy, false %> False
</div>
答案 1 :(得分:0)
radio_button方法(http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-radio_button)不会根据请求参数自动检查单选按钮。
<%= f.radio_button '', :crazy, 'true', { checked: params[:crazy] == 'true' } %> True
<%= f.radio_button '', :crazy, 'false', { checked: params[:crazy] == 'false' } %> False
请注意rails中的object_name / method区别,它会生成名为&#34; object_name [method]&#34;的参数。按照惯例。如果你真的希望你的参数只被命名为#34; crazy&#34 ;,请将object_name留空。