我使用以下rails form helper创建了复选框:
<%= check_box("tag", tag.id) %>
但是,我需要在默认情况下检查其中一些。 rails文档没有指定如何执行此操作。有办法吗?怎么样?
答案 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 或 0(Rails 的默认值),那么一切都很好。 Rails 会识别该字段是否被选中。
但是,如果您使用不同的数据存储或框架以另一种格式存储布尔值,则需要指定哪些值对应于选中和未选中。
这是一个例子:
<%= f.check_box :accept_privacy_policy, { class: 'my-class' }, "true", "false" %>
参考资料