我尝试与创建表格进行has_many关系,并将其添加到已创建的另一个表格中。
我的User
表已经没有任何关系。
我想创建一个关系为has_many Pro_user
的{{1}}。
问题是一个User
可以有多个User
而一个Pro_user
也可以有多个Pro_user
。
所以两个表都需要User
对吗?
所以我想到的是那个
has_many
但这不是正确的事,它从rails g model pro_user name:string email:string password_digest:string user:references
到belongs_to
Pro_user
我还应该如何在现有的表User
上添加has_many呢?我是否必须进行迁移才能重新创建表并添加关系?
感谢您的帮助!
答案 0 :(得分:3)
多对多关联的推荐方法是" has_many_through
"做法。如果您需要更多数据,这允许您稍后在连接表中添加其他列。您需要一个连接表,该表至少会有两个参考列到您的Users和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
两个关键要点是:
has_and_belongs_to_many
方法仍然没有问题,但是这里没有像has_many_through方法那样增长的空间,你需要专门命名表pro_users_users,因为Rails希望这两个表按词汇顺序列出。