在 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 %>

选中多个复选框时,它们的值将作为数组存储在数据库中。例如:

对于复选框,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"} %>