2012-05-16 65 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

相关问题