我正在尝试与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。 我很确定必须有一个我缺少的优雅解决方案。
由于
答案 0 :(得分:0)
鉴于您的模型设置,我认为您正在尝试使用错误的关系。
每当你在关系上有额外的属性(这里是boolean friends属性)时,使用has_many:through更为正确。
结论是:
你应该使用has_many:through如果你需要验证,回调, 或连接模型上的额外属性。