Rails 4:在新操作上传递布尔值

时间:2014-09-13 14:47:56

标签: ruby-on-rails

目标是使用特定链接传递特定的布尔值(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

但单击该链接时未选择任何单选按钮。

2 个答案:

答案 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留空。