如何在rails中检查check_box?

我使用以下rails form helper创建了复选框:

 

但是,我需要在默认情况下检查其中一些。 rails文档未指定如何执行此操作。 有办法吗? 怎么样?

这有一个非常简单的解决方案,由check_box直接支持(至少在rails 4中,我没有检查旧文档)

 <%= check_box("tag", tag.id, {checked: true}) %> 

这将选中复选框。 当然不是true你会提出一些逻辑来确定每一个是否被检查。

如果您需要检查new的check_box,并在edit正确填写,您可以执行以下操作:

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

正如我在这里提到的

rails docs确实说如何检查它,它取决于对象。 如果您没有要与check_box一起使用的实例对象,那么最好的选择是使用上面提到的check_box_tag。 如果你这样做,请继续阅读。

这是 check_box助手上文档的链接 。 基本上这是如何工作的,你必须定义一个实例变量。 该实例变量必须具有返回整数或布尔值的方法。 来自文档:

此对象必须是实例对象(@object)而不是本地对象。 这意味着该方法返回一个整数,如果该整数高于零,则选中该复选框。

例如,假设您的视图中有一个@tag实例,该实例具有启用的方法。 如果在@tag对象上启用为true,则以下代码段将导致选中该复选框,如果为false,则将取消选中该复选框。 要在默认情况下启用它,请在控制器中将enabled属性设置为true。 最后两个变量是选中并取消选中复选框时要与表单一起提交的值。

 <%= check_box "tag", "enabled", {}, "1", "0" %> 

很多时候,您会看到与表单构建器一起使用的check_box助手。 因此,如果将form_for用于@tag实例,您很可能会使用此代码段:

 <%= f.check_box :enabled %> 

check_box_tag而不是check_box有一种方法来设置它已被检查。

无需写入检查:对于rails> = 4.0,只需写入

 <%= check_box_tag "name", value, true %> # true or false 

使用check_box_tag您可以将其设置为true以便已经检查过。 更多信息: http : //api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

所有这些解决方案的问题在于它在重新提交时与params散列不一致,所以此刻我正在使用这样的东西,

 # ApplicationHelper def resolve_boolean_parameter resource, attribute, options = {} default = options.delete(:default) return default unless params[:utf8] return params[resource][attribute] == "1" end 

然后在视图中:

 
<%= f.label :accepts_newsletter, "Receive Newsletters" %> <%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true) %>

新function放在你的助手中

 def check_if_true(item) if(item == 'true' or item == true or item == 1 or item == '1') return true else return false end end 

在你的视图中

 <%= check_box("test", "active", {checked: check_if_true(@test.active) , :multiple => true, :style => "margin-left: 16px;"}, "true", "false") %>