我使用以下 rails form helper 制作了复选框:
<%= check_box("tag", tag.id) %>
但是,我需要默认检查其中一些。rails 文档没有指定如何执行此操作。有办法吗?如何?
我使用以下 rails form helper 制作了复选框:
<%= check_box("tag", tag.id) %>
但是,我需要默认检查其中一些。rails 文档没有指定如何执行此操作。有办法吗?如何?
这是从 rails 4 开始的方法,我没有检查旧文档。
<%= check_box("tag", tag.id, {checked: true}) %>
这将使复选框被选中。当然,代替true
您将输入一些逻辑来确定是否检查了每个逻辑。
如果您需要检查复选框new
并正确填写,edit
您可以执行以下操作:
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
正如我在这里提到的
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 %>
无需编写检查:对于 rails >= 4.0 为 true 只需编写
<%= check_box_tag "name", value, true %> # true or false
而check_box_tag
不是check_box
有一种方法可以设置它已被检查。
这个答案只与f.check_box
f.check_box
最多可以有 4 个参数:
因此,如果您的布尔字段存储为 1 或 0(Rails 的默认值),那么一切都很好。Rails 将识别该字段是否被选中。
但是,如果您使用不同的数据存储或以另一种格式存储布尔值的框架,则需要指定哪些值对应于选中和未选中。
这是一个例子:
<%= f.check_box :accept_privacy_policy, { class: 'my-class' }, "true", "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
然后在视图中:
<div><%= f.label :accepts_newsletter, "Receive Newsletters" %>
<%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true) %>
</div>
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") %>
这就是我在 2020 年现在的做法。
<%= form.check_box :with_cost, checked: true, class: '', type: 'checkbox', id: 'cost' %>
带checked: true
属性。
希望这可以帮助。
如果您在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