has_and_belongs_to_many到rails 3中的相同模型

时间:2012-12-22 11:33:56

标签: ruby-on-rails-3 has-and-belongs-to-many

我正在尝试与has_and_belongs_to_many结交朋友和敌人, 因此我创建了以下内容:

   create_table :people do |t|
     t.string :name
   end

   create_table "relations", :id => false do |t|
     t.integer "person_a_id", :null => false
     t.integer "person_b_id", :null => false
     t.boolean :friends
   end

我希望完成的第一个阶段是定义Person:HABTM关系,然后定义范围。 现在我遇到麻烦,因为has_and_belongs_to_many已经在Person中定义了连接 :foreign_key和:association_foreign_key,所以如果A是B的朋友,B不是A的朋友。 我搜索了HABTM笔记,我找到的唯一选项是手动设置:finder_sql和:delete_sql。 我很确定必须有一个我缺少的优雅解决方案。

由于

1 个答案:

答案 0 :(得分:0)

鉴于您的模型设置,我认为您正在尝试使用错误的关系。

每当你在关系上有额外的属性(这里是boolean friends属性)时,使用has_many:through更为正确。

请参阅the discussion here

结论是:

  

你应该使用has_many:through如果你需要验证,回调,   或连接模型上的额外属性。