数据建模结构-Rails



我有一个项目特定的问题。我正在努力确定在我的应用程序中设置模型的最有效、最合乎逻辑的方式。这里要建模的相关参与者是:供应商、供应商库存和产品。以下是每件物品应该能够以某种方式退货的明细:

存货:商店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 %>

现在你可以从下拉列表中选择你的产品,并动态设置价格和数量,以及你需要的任何东西。

最新更新