2012-05-16 64 views
1

我有兩個模型ObjectA和ObjectB。 ObjectB有兩列,a_1_id和a_2_id,它們都是ObjectA的外鍵。 ObjectB屬於這些外部ObjectA對象的每一個。如何設置一個模型屬於另一個模型的兩個實例的Rails關聯?

class ObjectA < ActiveRecord::Base 
    attr_accessible :player_1, :player_2, :subject, :turn 

    belongs_to :player_1, :class_name => "User" 
    belongs_to :player_2, :class_name => "User" 
    has_many :object_b, dependent: :destroy, :finder_sql => "SELECT * FROM object_bs where (a_1_id = #{id} or a_2_id = #{id})" 
end 

class ObjectB < ActiveRecord::Base 
    attr_accessible :a_1_id, :a_2_id 

    belongs_to :a_1_id, :class_name => "ObjectA" 
    belongs_to :a_2_id, :class_name => "ObjectA" 
end 

這是設置關聯的最佳方式嗎?

回答

1

使用:foreign_key選項:

belongs_to :player_1, :class_name => "User", :foreign_key => 'player1_id' 
belongs_to :player_2, :class_name => "User", :foreign_key => 'player2_id' 
#... 
belongs_to :a_1_id, :class_name => "ObjectA", :foreign_key => 'a_1_id' 
belongs_to :a_2_id, :class_name => "ObjectA", :foreign_key => 'a_2_id' 
+0

我認爲Rails的可確定通過簡單地追加_id給定的名稱。情況並非如此嗎? – Quentamia

+0

當您聲明'belongs_to:player_1'時,它假定有一個Player1類並查找關鍵字'player1_id'。當你指定':class_name =>'User''時,它會查找關鍵字'user_id'。 – tybro0103

+0

如果我添加外鍵,在嘗試刪除ObjectA實例時仍然收到以下錯誤:SQLite3 :: SQLException:no such column:object_bs.object_a_id:SELECT「object_bs」。* FROM「object_bs」WHERE「object_bs」 。「object_a_id」= 4 – Quentamia

相關問題