如何在 simple_form_for 中创建具有 2 个嵌套属性和复选框的 table

How to create a table in simple_form_for with 2 nested attributes and checkboxes

我正在尝试创建一个 table 以根据与其他 2 个模型的现有关系授予模型权限。

这个想法与此类似:https://ibb.co/DRTywF6

对于给定的品牌,我会:

              |supplier 1 | supplier 2| supplier 3

clothes_type 1     X

clothes_type 2                  X          X

clothes_type 3     X

我创建了一个连接 table "permissions" 并编辑了模型,以便品牌可以访问供应商和 clothes_types

显示 headers 很好,因为我只是遍历供应商数组,但我找不到为手头品牌的每对 clothes_type/supplier 创建复选框的方法。

下面是我写的

<%= simple_form_for @brand do |f| %>
  <table class="table table-hover">
    <thead>
      <tr>
        <th nowrap><%= "Item types" %></th>
          <%@suppliers.each do |supplier| %>
            <th nowrap><%= supplier.company %></th>
           <% end %>
      </tr>
    </thead>

    <tbody>

    # that's where I need help :)

    </tbody>

我的模型如下:

class Brand < ActiveRecord::Base
  has_many :permissions
  has_many :suppliers, through: :permissions
  has_many :clothes_types, through: :permissions
end

class Supplier < ActiveRecord::Base
  has_many :permissions
  has_many :brands, through: :permissions
  has_many :clothes_types, through: :permissions
end

class ClothesType < ActiveRecord::Base
  has_many :permissions
  has_many :suppliers, through: :permissions
  has_many :brands, through: :permissions
end

class Permission < ActiveRecord::Base
  belongs_to :supplier
  belongs_to :brand
  belongs_to :clothes_type
end

我尝试了 f.collection_check_boxes,但它为我提供了给定品牌的所有供应商,而且也没有按服装类型进行过滤。

我希望能够显示每个品牌的 table。此 table 将针对给定的 clothes_type 显示您是否有权访问制造商。如果你这样做,复选框将被选中,如果你不这样做,它将被取消选中,让你选择选中它然后提交表单以更新权限。

提前致谢!

您似乎想要执行以下操作:

<%= simple_form_for @brand do |f| %>
  <table class="table table-hover">
    <thead>
      <tr>
        <th nowrap><%= "Item types" %></th>
        <% @suppliers.each do |supplier| %>
          <th nowrap><%= supplier.company %></th>
        <% end %>
      </tr>
    </thead>
    <tbody>
      <% @clothes_types.each do |clothes_type| %>
        <td nowrap><%= clothes_type.name %></td>
        <% @suppliers.each do |supplier| %>
          <td no_wrap>
            <% if supplier.clothes_types.include?(clothes_type) %>
              # use check_box_tag here
            <% end %>
          </td>
        <% end %>
      <% end %>
    </tbody>
  </table>
<% end %>

关于 check_box_tag,我不确定您希望 name 是什么,因为您的问题有些模棱两可。此外,要设置 checked 值,您可能需要执行以下操作:

supplier.permissions.find_by(clothes_type: clothes_type)

或者也许

supplier.permissions.find_by(clothes_type: clothes_type).try(:granted?)

不清楚权限的存在是否意味着权限已被授予,或者权限是否具有类似 granted? 的属性。同样,您的问题不明确。