Rails 所有可能对象的简单表单关联
Rails Simple Form Association for all possible objects
我正在尝试为 product/cart 场景设置 simple_form
,但与典型场景略有不同。我的显示需要列出所有可用产品,并为每个产品输入数量。保存时,cart_items 应该只为那些提供了数量的项目存储 cart_id
、product_id
和 qty
。如果它是空白或零,则不应将其添加到 cart_items
购物车:
class Cart < ApplicationRecord
has_many :cart_items
has_many :products, through: :cart_items
accepts_nested_attributes_for :cart_items
end
购物车商品:
class CartItem < ApplicationRecord
belongs_to :cart
belongs_to :product
end
产品:
class Products < ApplicationRecord
has_many :cart_items
has_many :carts, through: :cart_items
end
我正在尝试让我的表单显示如下:
[ x ] (Qty) Product Name
[ x ] (Qty) Product Name
[ x ] (Qty) Product Name
[ x ] (Qty) Product Name
我不确定如何使用 f.association :cart_items, collection: Products.all()
获取数量的额外字段,我试过这个:
<%= f.simple_fields_for :cart_items do |fa| %>
<%= fa.association :product, as: :select %>
<%= fa.input :qty %>
<% end %>
但这只会显示现有关联,还会在 select 列表中显示产品,而我只想列出所有产品并显示其关联数量。
是否有一种我忽略的漂亮且漂亮的 "Rails-y" 方法,或者我是否需要在我的控制器和视图中进行更多手动操作?我正在使用 Rails 5.
我怀疑没有特殊的"Rails-y"方式,或者我不知道。我认为您必须遍历所有产品并在 simple_fields_for 标签之前为缺失的产品构建 cart_items。如果带有产品的购物车项目已经存在,则只显示它;否则先构建再显示。
如果缺少数量,您还必须添加拒收 cart_items。像这样:
accepts_nested_attributes_for :cart_items, reject_if: lambda { |ci| ci[:qty].blank? || ci[:qty].zero? }
这应该可以解决问题。
我正在尝试为 product/cart 场景设置 simple_form
,但与典型场景略有不同。我的显示需要列出所有可用产品,并为每个产品输入数量。保存时,cart_items 应该只为那些提供了数量的项目存储 cart_id
、product_id
和 qty
。如果它是空白或零,则不应将其添加到 cart_items
购物车:
class Cart < ApplicationRecord
has_many :cart_items
has_many :products, through: :cart_items
accepts_nested_attributes_for :cart_items
end
购物车商品:
class CartItem < ApplicationRecord
belongs_to :cart
belongs_to :product
end
产品:
class Products < ApplicationRecord
has_many :cart_items
has_many :carts, through: :cart_items
end
我正在尝试让我的表单显示如下:
[ x ] (Qty) Product Name
[ x ] (Qty) Product Name
[ x ] (Qty) Product Name
[ x ] (Qty) Product Name
我不确定如何使用 f.association :cart_items, collection: Products.all()
获取数量的额外字段,我试过这个:
<%= f.simple_fields_for :cart_items do |fa| %>
<%= fa.association :product, as: :select %>
<%= fa.input :qty %>
<% end %>
但这只会显示现有关联,还会在 select 列表中显示产品,而我只想列出所有产品并显示其关联数量。
是否有一种我忽略的漂亮且漂亮的 "Rails-y" 方法,或者我是否需要在我的控制器和视图中进行更多手动操作?我正在使用 Rails 5.
我怀疑没有特殊的"Rails-y"方式,或者我不知道。我认为您必须遍历所有产品并在 simple_fields_for 标签之前为缺失的产品构建 cart_items。如果带有产品的购物车项目已经存在,则只显示它;否则先构建再显示。
如果缺少数量,您还必须添加拒收 cart_items。像这样:
accepts_nested_attributes_for :cart_items, reject_if: lambda { |ci| ci[:qty].blank? || ci[:qty].zero? }
这应该可以解决问题。