2012-03-06 62 views
0

我有一個有問題的關係,其中可以綁定到汽車中的項目。可能在AR關係模型中有兩個不同的外鍵

例如:

class Item < ActiveRecord::Base 
    has_many :object_connections, :foreign_key => 'engine_id' 
    has_many :object_connections, :foreign_key => 'chassis_id' 

它看起來像它看起來只是在最後。有什麼方法可以指定?另外,是否可以添加條件如:is_engine => true?這是一個被採納的項目,只是試圖讓這個工作。

THX

+0

您只能在模型中使用關聯名稱(即'has_many'後面的第一個參數)。你能告訴我們更多關於你的模型嗎? ObjectConnection有什麼關聯?還有發動機和底盤車型嗎? – 2012-03-06 22:02:19

+0

基本上,有物品,有object_connection是由'物品'組成的。項目在內部作爲引擎或底層進行管理。這部分是模式的最好部分。我懷疑我只需要做這個習慣,因爲我們只是在查詢中真正做到這一點。看起來像條件​​查詢其他表沒有太多的幫助。 – timpone 2012-03-06 22:07:24

+0

內部管理如何?您能否向我們展示其他三種模型的關聯代碼和相關數據庫字段? – 2012-03-06 22:39:56

回答

0

我認爲你正在尋找一個has_one association:class_name選項:

class Item < ActiveRecord::Base 
    has_one :engine, :foreign_key => 'engine_id', :class_name => 'ObjectConnection' 
    has_one :chassis, :foreign_key => 'chassis_id', :class_name => 'ObjectConnection' 
end 

的關聯需要被唯一命名的,通常的ActiveRecord可以計算出基於關聯的:class_name;然而,你有兩樣東西指向同一個地方,所以你必須手工把它連接起來。

相關問題