34

我使用以下 rails form helper 制作了复选框:

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

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

4

11 回答 11

55

这是从 rails 4 开始的方法,我没有检查旧文档。

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

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

于 2014-02-15T01:34:53.007 回答
13

如果您需要检查复选框new并正确填写,edit您可以执行以下操作:

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

正如我在这里提到的

于 2016-05-16T00:43:44.130 回答
4

rails 文档确实说明了如何检查它,这取决于对象。如果您没有与 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 %>
于 2012-11-29T01:09:48.583 回答
3

无需编写检查:对于 rails >= 4.0 为 true 只需编写

<%= check_box_tag "name", value, true %> # true or false
于 2017-03-16T12:15:39.540 回答
2

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

于 2012-11-29T00:11:32.173 回答
1

这个答案只与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" %>


参考

于 2021-03-01T20:23:52.557 回答
0

使用check_box_tag您可以将其设置为true已选中。更多信息在这里:http ://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

于 2012-11-29T00:50:35.577 回答
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>
于 2015-11-03T17:47:39.777 回答
0

放置在 Helper 中的新功能

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") %>
于 2015-12-01T17:14:35.650 回答
0

这就是我在 2020 年现在的做法。

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

checked: true属性。

希望这可以帮助。

于 2020-10-21T11:31:40.797 回答
0

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

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

如您所见,在哈希内部, first 是class, nextdata和 last checked。这适用于 Rails 6.0

于 2020-11-02T22:28:48.417 回答