我有一个特定于项目的问题。我正在尝试确定在我的应用中设置模型的最有效和最合理的方法。这里建模的相关参与者是:供应商,供应商库存和产品。以下是每个项目应以某种方式返回的细分:
库存: 商店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
答案 0 :(得分:1)
我不确定我是否理解你的具体需求,特别是如果模型集只是例如,但从名称来看,这将是我的实现。
供应商是主要实体,它将通过联接表库存拥有许多产品,
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
执行此操作您可能无法在视图中对此进行编辑,设置库存的价格和数量。同样,我这样做的方法是使用嵌套字段并直接与连接表交互,而不是产品,这里是一些使用simple_form gem的快速部分代码,
在你的表格上,
<%= 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 %>
现在,您可以从下拉列表中选择产品,并设置价格和数量,以及动态需要的任何产品。