2015-06-09 67 views
0

我有多个模型(即轮胎和轮辋)。多型号有多个参数(如颜色,大小,类型等)(动态)Rails模型(对象)参数(值)通过has_many关联

我有这样的:

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。

我可以创建

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

动态

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

呢?

此外,是否有任何ActiveRecord巫术,可以让我实现类似Tire.compatible_rims这将只返回那些参数联合(bead_diameter,宽度)具有相同的值?

+3

您正在寻找多态关联:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations – BroiSatse

+1

虽然多形态将在此处修复,但确定在进行更改之前将会有多少这些多态模型。如果它总是2,那我就把它们作为单独的模型。我的一般经验法则是少于3个模型,这将永远不会改变,然后实现个人模型4个或更多模型或需要快速添加其他模型 – engineersmnky

+0

将有大约30个模型。假设:轮胎,轮辋,刹车片,液体等等...... – lmojzis

回答

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访问。

相关问题