2015-06-09 69 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訪問。

相關問題