Rails 4深度嵌套关联,用于从值集合中进行选择

时间:2014-10-08 07:05:53

标签: ruby-on-rails ruby-on-rails-4

在Rails 4中执行此操作的最佳方法是什么?

我有产品。产品属于一个类别,如"衬衫。"类别有很多属性,例如"大小。"属性有许多PropertyValues,例如" Small," "中,"等

用户需要能够将产品分配到类别,然后为属性设置属性值。

class Product < ActiveRecord::Base
  belongs_to :category

class Category < ActiveRecord::Base
  has_many :products
  has_many : properties    

class Property < ActiveRecord::Base
  belongs_to :category
  has_many :property_values

class PropertyValue < ActiveRecord::Base
  belongs_to :property

因此,如果我要跟踪用户为其产品的特定类别属性选择的值,请使用哪种关联并设置?

我已经考虑过为Product和PropertyValue创建一个has_many的场景,:through =&gt;通过ProductAttribute连接模型进行关联,并通过创建和/或删除连接表记录来查找/设置选定的PropertyValues。因此:

class Product < ActiveRecord::Base
  belongs_to :category
  has_many :product_attributes
  belongs_to :property_value, :through => :product_attribute

class PropertyValue < ActiveRecord::Base
  belongs_to :property
  has_many :product_attributes
  has_many :products, :through => :product_attributes

class ProductAttribute < ActiveRecord::Base
  belongs_to :product
  belongs_to :property_value

或者,我可以创建一个产品和属性has_many,:through =&gt;通过ProductAttribute连接模型进行关联。从那里,我可以将选定的PropertyValue的文本/值存储在连接表的字段中,或者我可以更进一步为ProductAttribute创建与PropertyValue的belongs_to关联并跟踪通过这个选择的值。许多协会。因此:

class Product < ActiveRecord::Base
  belongs_to :category
  has_many :product_attributes
  belongs_to :property, :through => :product_attribute

class Property < ActiveRecord::Base
  belongs_to :category
  has_many :property_values
  has_many :product_attributes
  has_many :products, :through => :product_attributes

class ProductAttribute < ActiveRecord::Base
  belongs_to :product
  belongs_to :property
  belongs_to :property_value

class PropertyValue < ActiveRecord::Base
  belongs_to :property
  has_many :product_attributes

不确定这些方法有多可行,如果有的话,或者如果有其他最好的做法,我不明白这种情况。

0 个答案:

没有答案