如何在rails中检查check_box?

时间:2012-11-28 23:55:24

标签: ruby-on-rails ruby-on-rails-3 checkbox ruby-on-rails-3.2 form-helpers

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

<%= check_box("tag", tag.id) %>

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

11 个答案:

答案 0 :(得分:45)

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

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

这将选中复选框。当然,代替true,您将放入一些逻辑,确定是否每个都被检查。

答案 1 :(得分:8)

如果您需要在edit上检查check_box,并在<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>上正确填写,则可以执行以下操作:

import pandas as pd import numpy as np pos = pd.DataFrame({'Station(s)':[',1,2,,','0,1,2,3,4'], 'Position':['Contractor','President'], 'Site(s)':['A,B','A'], 'Item(s)':['1','1,2'] }) pos[['Position','Site(s)','Station(s)','Item(s)']] pos Position Site(s) Station(s) Item(s) 0 Contractor A,B ,1,2,, 1 1 President A 0,1,2,3,4 1,2

正如我提到的here

答案 2 :(得分:4)

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

Here's the link到check_box帮助器上的文档。基本上这是如何工作的,你必须定义一个实例变量。该实例变量必须具有返回整数或布尔值的方法。来自文档:

  

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

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

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

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

<%= f.check_box :enabled %>

答案 3 :(得分:2)

check_box_tag代替check_box可以设置已经过检查。

答案 4 :(得分:2)

无需写入已检查:对于rails&gt; = 4.0,则为true 只需写下

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

所有这些解决方案的问题在于它在重新提交时不能很好地使用params哈希,所以目前我使用的是这样的,

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

  return params[resource][attribute] == "1"
end

然后在视图中:

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

答案 7 :(得分:0)

放置在助手中的新功能

def check_if_true(item)
  ActiveModel::Type::Boolean.new.cast(item)
end

在您的视图中

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

答案 8 :(得分:0)

这就是我现在在2020年所做的事情。

<%= form.check_box :with_cost, checked: true, class: '', type: 'checkbox', id: 'cost' %>

具有checked: true属性。

希望这会有所帮助。

答案 9 :(得分:0)

如果您在 Rails 5.1 + 中使用表单助手来构建复选框,则必须以特定顺序将值传递给哈希。

= form.check_box :open_after, { class: 'form-control mt-1', data: {}, checked: true }, true, false

如您所见,在哈希内,第一个是class,第二个是data,最后一个是checked。这对我适用于Rails 6.0

答案 10 :(得分:0)

这个答案只与f.check_box

有关

f.check_box 最多可以接受 4 个参数:

  1. 输入名称
  2. 包含 html 类、id 等选项的哈希
  3. 哪个值代表“已检查”(默认为“1”)
  4. 哪个值代表“未选中”(默认为“0”)

因此,如果您的布尔字段存储为 1 或 0(Rails 的默认值),那么一切都很好。 Rails 会识别该字段是否被选中。

但是,如果您使用不同的数据存储或框架以另一种格式存储布尔值,则需要指定哪些值对应于选中和未选中。

这是一个例子:

<%= f.check_box :accept_privacy_policy, { class: 'my-class' }, "true", "false" %>


参考资料