(动态)通过has_many association

时间:2015-06-09 20:48:56

标签: ruby-on-rails ruby activerecord

我有多种型号(即轮胎和轮辋)。多个模型有多个参数(如颜色,大小,类型等)

我有这个:

Parameter:
  belongs_to :tires
  belongs_to :rims
ParameterValue:
  belongs_to :parameter
  belongs_to :tires, :through => :parameter
  belongs_to :rims, :through => :parameter
Tire:
  has_many :parameters
Rim:
  has_many :parameters

这就是问题所在。多个模型可以具有相同的参数 - 值对,因此创建单独的模型(如RimParameterValue和TireParameterValue)不是最佳的,IMO。

我可以创建动态

#<ParameterValue object_model: 'rim', object_id: 1542, parameter_id: 15674, value: 'Yes'>

而不是

#<RimParameter rim_id: 1542, parameter_id: 15674, value: 'Yes'>

此外,是否有任何ActiveRecord法术可以允许我实现像Tire.compatible_rims这样只会返回那些参数union(bead_diameter,width)具有相同值的东西?

1 个答案:

答案 0 :(得分:1)

使用多态关联如下:

# Parameter.rb
belongs_to :abc, polymorphic: true

# Migration file for parameters
t.references :abc, polymorphic: true

# Tire.rb
has_many :parameters, as: :abc

# Rim.rb
has_many :parameters, as: :abc

现在参数可以作为@ tire.parameters或@ rim.parameters访问。