Ruby on rails 3 在rails 3中,有很多属于同一型号的吗

Ruby on rails 3 在rails 3中,有很多属于同一型号的吗,ruby-on-rails-3,has-and-belongs-to-many,Ruby On Rails 3,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.boo

我正试图与很多人建立朋友和敌人的联系, 因此,我创建了以下内容:

   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关系,然后是定义范围。 现在我很难亲自定义这种联系,因为很多人都有 :foreign_key和:association_foreign_key,因此如果A是B的朋友,B就不是A的朋友。 我搜索了HABTM notes,找到的唯一选项是手动设置:finder\u sql和:delete\u sql。 我很确定我错过了一个优雅的解决方案


谢谢

鉴于您的模型设置,我认为您试图使用错误的关系

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

其中结论是:

您应该使用has\u many:如果需要验证、回调, 或联接模型上的其他属性


如果A是B的“朋友”,那么B一定是A的“朋友”,这一假设是否正确?我可能会选择某种邀请模式,因为双方都需要就友谊达成一致。所有这些,对于HABTM协会来说,在命名关联表时有一个约定要遵循。第一个字母的复数形式是第一个字母,第二个字母的复数形式是第二个字母。例如:婴儿服装或管理员用户jiříPospíšil:A和B是否是朋友由我决定。所以不像《面子书》这不是社交网络。。。建立这种联系是最终的。斯卡里古伊:当你的两张桌子都是一样的时候,这有点问题。将表命名为“people\u people”将产生两个名为“person\u id”的列。谢谢你们两位的评论!若我将使用这个关系,我将不会避免设置sql的查询,因为可以从两个不同的外键使用这个关系。如果由于有额外的属性,我需要设置验证或任何模型逻辑,我宁愿将关系拆分为两个表(朋友和敌人),不是这样吗?不是这样。我不太明白你说的是什么,但是你不需要SQL查询。这是has_很多的基本用法。您可以使用单独的表(用于朋友和敌人),但这不是必需的。我尝试做的主要事情是避免设置SQL查询。任何简单的连接,如示例中给出的连接(内科医生-has_many:patients,:through=>:appointment),都不需要SQL查询。随着时间的推移,我对找到一个优雅的设置失去了希望。你对“你不需要SQL查询”的哪一部分有意见?我想你还没有完全理解这个问题。has_Multi-through search在呈现的表中搜索您的模型id,并将其与“has_Multi”模型id关联。在我的例子中,两者都是相同的。