0

我正在尝试与 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 关系,然后是定义范围。现在我在 Person 中定义连接时遇到了麻烦,因为 has_and_belongs_to_many 有:foreign_key 和 :association_foreign_key,所以如果 A 是 B 的朋友,B 不是 A 的朋友。我已经搜索了 HABTM 注释,唯一的选择是我发现是手动设置:finder_sql 和:delete_sql。我很确定一定有一个我缺少的优雅解决方案。

谢谢

4

1 回答 1

0

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

每当您在关系上有额外的属性(这里是布尔朋友属性)时,使用 has_many :through 更正确。

请参阅此处的讨论

结论是:

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

于 2012-12-24T08:07:19.997 回答