(dynamic) Rails model (object) parameters (values) through has_many associations

144 Views Asked by At

I have a multiple models (ie. tires and rims). Multiple models have multiple parameters (like color, size, type, etc.)

I have this:

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

Here goes the problem. Multiple models can have same parameters-value pairs so creating separate models like RimParameterValue and TireParameterValue isn't optimal, IMO.

Can I create a dynamic

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

instead of

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

?

Additionally, is there any ActiveRecord sorcery that could allow me to implement something like Tire.compatible_rims which would return only those parameter union (bead_diameter, width) has the same values?

1

There are 1 best solutions below

0
On BEST ANSWER

Use polymorphic association as follows:

# 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

Now parameters can be accessed as @tire.parameters or @rim.parameters.