我有一个项目特定的问题。我正在努力确定在我的应用程序中设置模型的最有效、最合乎逻辑的方式。这里要建模的相关参与者是:供应商、供应商库存和产品。以下是每件物品应该能够以某种方式退货的明细:
存货:商店ID产品和相关详细信息(价格、名称、品牌、详细信息、产品代码)
供应商:店铺ID、位置、名称
产品:价格,名称,品牌,详细信息,产品代码
显然,在这个方案中,产品和库存之间有很多重复。我的问题是,虽然供应商的库存中可能有类似的商品,但价格总是不同的。所以我不能简单地通过产品代码来关联模型。因为大多数供应商都会有相同的产品,如果我用所有的产品信息来模拟商店库存,这不是很重复吗?也有可能我不需要为供应商提供一个单独的模型,只需尝试保留所有库存,但我迷失了方向。请帮忙?!提前谢谢。
编辑:
这是我的模型结构,尽管我不确定它是否理想。
class Vendor < ActiveRecord::Base
attr_accessible :name, :address
has_one :inventory
has_many :products, through: :inventories
end
class Inventory < ActiveRecord::Base
has_many :products
belongs_to :vendor
end
class Product < ActiveRecord::Base
attr_accessible :upc, :brand, :product, :details, :price
has_many :inventories
has_many :vendors, through: :inventories
end
我不确定我是否理解您的具体需求,尤其是如果模型集只是示例,但从名称来看,这将是我的实现。
供应商是主要实体,它将通过联接表库存、拥有许多产品
class Vendor < ActiveRecord::Base
attr_accessible :name, :address
has_many :inventories
has_many :products, through: :inventories
end
然而,产品的某些方面需要在供应商之间有所不同,在这种情况下,价格和数量(我刚刚编的)可以存储在联接表中,因为它是独立的,是为每个产品和供应商关系制作的,非常适合存储价格和数量等信息。
class Inventory < ActiveRecord::Base
attr_accessible :product_id, :vendor_id, :price, :quantity
belongs_to :product
belongs_to :vendor
end
无论供应商如何处理,产品都应该只有通用的属性,同样,如果产品在哪里更改,所有供应商都应该同意。
class Product < ActiveRecord::Base
attr_accessible :upc, :brand, :product, :details
has_many :inventories
has_many :vendors, through: :inventories
end
执行此操作时,您可能会在视图中编辑此内容、设置库存的价格和数量时遇到困难。同样,我的方法是使用嵌套字段并直接与联接表交互,而不是与产品交互
在你的表格上,
<%= f.simple_fields_for :inventories do |inventory_fields| %>
<%= render partial: "inventory_fields", locals: {f: inventory_fields }%>
<% end %>
<%= link_to_add_fields "Add", f, :f %>
和inventory_fields.html.erb 中
<%= link_to "Remove", '#', class: "remove_fields btn btn-danger" %>
<%= f.input :product_id, collection: Product.all.somethingsomething, include_blank: false %>
<%= f.input :price %>
<%= f.input :quantity %>
现在你可以从下拉列表中选择你的产品,并动态设置价格和数量,以及你需要的任何东西。