这是用户表:
create_table :users do |t|
t.string :name
t.string :password
t.string :department
t.timestamps
end
这是见面表:
create_table :meets do |t|
t.string :name, null: false
t.string :state, null: false
t.string :description, null: false
t.string :location, null: false
t.float :spend, null: false
t.timestamps
end
以下是用户与见面之间的关系:
用户可以创建多个会议
会面可以有很多参与者(用户)
我是新手学习rails,我试图创建迁移和模型,但我不知道正确的方法:
用户可以创建多个符合,我想我可以在遇到迁移中添加引用以创建一对一的关系
t.references :users
一次见面会有很多用户,我想我必须创建一个连接表:
rails g migration CreateJoinTableUsersMeets user meet
上述命令将自动生成一个迁移文件:
create_join_table :Users, :Ploys do |t|
t.index [:user_id, :ploy_id]
t.index [:ploy_id, :user_id]
end
但我想知道如何在连接表上创建模型关系?
答案 0 :(得分:1)
我就是这样做的。
create_table :users do |t|
t.string :name
t.string :password
t.string :department
t.timestamps
end
create_table :meets do |t|
t.string :name, null: false
t.string :state, null: false
t.string :description, null: false
t.string :location, null: false
t.float :spend, null: false
t.references :creator, class_name: "User"
t.timestamps
end
create_table :participations do |t|
t.references :user
t.references :meet
end
add_index :participations, [:user_id, :meet_id]
add_index :participations, [:meet_id, :user_id]
class User < ActiveRecord::Base
has_many :meets, through: :participations
has_many :created_meets, class_name: "Meet", foreign_key: "creator_id"
end
class Meet < ActiveRecord::Base
has_many :users, through: :participations
belongs_to :creator, class_name: "User"
end
您不在表中创建一对一关系,但您只需创建一个名为participations的连接表。该模型将引用用户和会议。然后,您可以通过将上述代码添加到两个模型来指定has_and_belongs_to_many。关键是它使用连接表来创建关联。如果您有任何其他问题,请评论:)