【问题标题】:How to Create a 3 Column Join Table Between 2 Models如何在 2 个模型之间创建 3 列连接表
【发布时间】:2014-07-18 07:57:45
【问题描述】:

我正在尝试在具有 3 列的 2 个模型之间创建一个连接表。这些模型称为UserDare。连接表称为DaresUsers。我想在连接表中包含一个author_idaccepter_iddare_id

每个挑战只有一位作者,但会有多个accepters,因为不止一个用户可以接受同一个挑战。我应该使用has_many through 关系吗?如果是,我会在我的模型中声明什么?我的困惑是因为User 模型在两个方面被连接表引用:author_idaccepter_id

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails join activemodel database-relations


    【解决方案1】:

    试试这个:

    class Dare < ActiveRecord::Base
      belongs_to :author, class_name: 'User'
      has_many :dare_user_relations, dependent: :destroy
      has_many :accepters, through: :dare_user_relations
    end
    
    class DareUserRelation < ActiveRecord::Base
      belongs_to :accepter, class_name: 'User'
      belongs_to :dare
    end
    
    class User < ActiveRecord::Base
      has_one :dare, foreign_key: 'author_id', dependent: :destroy
      has_many :dare_user_relations, dependent: :destroy
      has_many :dares, through: :dare_user_relations, foreign_key: 'accepter_id'
    end
    

    或不带模型:

    class Dare < ActiveRecord::Base
      belongs_to :author, class_name: 'User'
      has_and_belongs_to_many :accepters, class_name: 'User', association_foreign_key: 'accepter_id'
    end
    
    class User < ActiveRecord::Base
      has_one :dare, foreign_key: 'author_id', dependent: :destroy
      has_and_belongs_to_many :dares, foreign_key: 'accepter_id'
    end
    

    【讨论】:

    • 感谢您的回复,但是这个解决方案的问题是现在user 只能有一个dare,而他们应该可以有很多dares。另外,user 应该 has_and_belongs_to_many daresforeign_key: 'accepter_id' 对吗?
    • @ddig,感谢您提供详细信息,了解您的情况。查看更新的答案。
    • 我认为这很有效,非常感谢你,我只有最后一个问题,我的印象是,每当你在两个模型之间有两个 has_and_belongs_to_many 关系时,总是需要一个连接表。我指的是您的第二个解决方案,特别是acceptersdares 之间的关系
    • 当然,您需要一个名为dares_users 的连接表。但是,请记住,您不需要此连接表的模型。如果您还有其他问题,请告诉我。
    • 是的,Sergey 这对我有帮助,我最终创建了一个新模型,因为我需要连接表有多个属性列,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2019-10-06
    • 1970-01-01
    • 2018-10-19
    • 2011-07-28
    • 2021-02-01
    相关资源
    最近更新 更多