在 Rails 4 中设置编辑方法的复选框
Set checkboxes on edit method in Rails 4
假设我在 new.html.erb 中有一个表单,其中包含一些复选框和 select 标签以及其他 text_fields。假设我创建了一条记录(选中一个或多个复选框和 select 某项)并将其成功保存到数据库。
当我去 edit.html.erb 应该编辑这条记录时,我遇到以下情况:
1) 所有 text_fields 都填充了我要编辑的那条记录的值 (OK)
2) 但是复选框都未选中(不正确)
3) select 标签中没有任何内容 select(不正确)
所以第2点和第3点是有问题的。
编辑记录时如何填充复选框和 select 标签?
我的例子:
我有一个 collection_select:
<%= f.collection_select :type, RequestType.order(:typeName), :id, :typeName, {include_blank:true }, {:class => "types"} %>
以及根据 select 标签值实际生成的复选框(有效)。
<% @stypes.each do |stype| %>
<span class="sub_type_cbox">
<%= check_box_tag 'stype_ids[]', stype.id %>
<%= stype.subTypeName %>
</span>
<br>
<% end %>
选中多个复选框时,它们的值将作为数组存储在数据库中。例如:
- '1'
- '2'
意味着复选框 1 和 2 是 selected(实际上是 id)。
对于复选框,check_box_tag
允许第三个参数,即是否选中。所以我们可以简单地检查对象是否已经具有该类型。使用您将表单绑定到的对象会更容易,但由于您没有发布完整的表单,我看不到那是什么。因此,您可以将 f.object
更改为 @post
或它绑定的任何内容。
<% @stypes.each do |stype| %>
<span class="sub_type_cbox">
<%= check_box_tag 'stype_ids[]', stype.id, f.object.stype_ids.include?(stype.id) %>
<%= stype.subTypeName %>
</span>
<br>
<% end %>
对于 select,您只需将 selected 的内容传递给方法。同样,您可以将 f.object
替换为您将表单绑定到的任何内容。
<%= f.collection_select :type, RequestType.order(:typeName), :id, :typeName, { selected: f.object.type, include_blank:true }, {:class => "types"} %>
假设我在 new.html.erb 中有一个表单,其中包含一些复选框和 select 标签以及其他 text_fields。假设我创建了一条记录(选中一个或多个复选框和 select 某项)并将其成功保存到数据库。 当我去 edit.html.erb 应该编辑这条记录时,我遇到以下情况:
1) 所有 text_fields 都填充了我要编辑的那条记录的值 (OK)
2) 但是复选框都未选中(不正确)
3) select 标签中没有任何内容 select(不正确)
所以第2点和第3点是有问题的。 编辑记录时如何填充复选框和 select 标签?
我的例子: 我有一个 collection_select:
<%= f.collection_select :type, RequestType.order(:typeName), :id, :typeName, {include_blank:true }, {:class => "types"} %>
以及根据 select 标签值实际生成的复选框(有效)。
<% @stypes.each do |stype| %>
<span class="sub_type_cbox">
<%= check_box_tag 'stype_ids[]', stype.id %>
<%= stype.subTypeName %>
</span>
<br>
<% end %>
选中多个复选框时,它们的值将作为数组存储在数据库中。例如:
- '1'
- '2' 意味着复选框 1 和 2 是 selected(实际上是 id)。
对于复选框,check_box_tag
允许第三个参数,即是否选中。所以我们可以简单地检查对象是否已经具有该类型。使用您将表单绑定到的对象会更容易,但由于您没有发布完整的表单,我看不到那是什么。因此,您可以将 f.object
更改为 @post
或它绑定的任何内容。
<% @stypes.each do |stype| %>
<span class="sub_type_cbox">
<%= check_box_tag 'stype_ids[]', stype.id, f.object.stype_ids.include?(stype.id) %>
<%= stype.subTypeName %>
</span>
<br>
<% end %>
对于 select,您只需将 selected 的内容传递给方法。同样,您可以将 f.object
替换为您将表单绑定到的任何内容。
<%= f.collection_select :type, RequestType.order(:typeName), :id, :typeName, { selected: f.object.type, include_blank:true }, {:class => "types"} %>