如何在 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?
的属性。同样,您的问题不明确。
我正在尝试创建一个 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?
的属性。同样,您的问题不明确。