【问题标题】:how to do a has_many relation on two tables?如何在两个表上建立 has_many 关系?
【发布时间】:2017-04-24 14:15:54
【问题描述】:

我正在尝试在创建时与表建立 has_many 关系,并将其添加到已创建的另一个表中。

我的User 表已经没有任何关系了。

我想创建一个 Pro_user 与关系 has_many User

问题是一个User 可以有多个Pro_user,一个Pro_user 也可以有多个User

所以两个表都需要has_many 对吗?

所以我想到的是那个

rails g model pro_user name:string email:string password_digest:string user:references

但这不是正确的事情,它正在将belongs_toPro_user变为User

还有我应该怎么做才能在我现有的表 User 上添加 has_many ?我是否必须进行迁移才能重新创建表并添加关系?

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails associations


    【解决方案1】:

    推荐的多对多关联方法是“has_many_through”方法。如果您需要更多数据,这允许您稍后在连接表中添加其他列。您将需要一个连接表,该表至少有两个参考列到您的用户和 ProUsers 表以及标准 id 列。 (参考:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

    因此,您的 User 和 ProUser 表中将没有任何参考列。相反,您将创建第三张名为 BoatsAndPros 的表(您可以随意命名)并执行以下操作:

        create_table :boats_and_pros do |t|
          t.belongs_to :user, index: true
          t.belongs_to :pro_user, index: true
          t.timestamps
        end
    

    然后在相应的boats_and_pros.rb 模型文件中添加:

    belongs_to :user
    belongs_to :pro_user
    

    在您的 user.rb 文件中,您将添加:

     has_many :boats_and_pros
     has_many :pro_users, through: :boats_and_pros
    

    在您的 pro_user.rb 模型文件中,您将添加

    has_many :boats_and_pros
    has_many :users, through: :boats_and_pros
    

    两个关键要点是:

    • “oldschool”has_and_belongs_to_many 方法仍然可以,但不允许空间像 has_many_through 方法那样增长,您需要专门命名表 pro_users_users 因为 Rails 期望这两个表按词法顺序列出.
    • 一对多关系(如您最初尝试的最终结果)将引用保留在其中一个表中,而多对多关系需要第三个连接表,如上所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多