一夜之间,我完全忘记了如何为这种类型的关系创建迁移:
我有一个项目表和一个用户表,每个用户都有他们自己创建的项目,用户如何在创建或编辑项目时共享他们创建的项目,所以关系是:
每个项目可能有很多用户并且属于用户,而每个用户有很多项目并且属于一个项目。
问题?
我不知道如何从这个 >.> 进行迁移,因为有人告诉我我需要创建一个新表来规定这种关系。
我刚在想
generate migration project_user project_id :int user_id :int
那是对的吗?
一夜之间,我完全忘记了如何为这种类型的关系创建迁移:
我有一个项目表和一个用户表,每个用户都有他们自己创建的项目,用户如何在创建或编辑项目时共享他们创建的项目,所以关系是:
每个项目可能有很多用户并且属于用户,而每个用户有很多项目并且属于一个项目。
问题?
我不知道如何从这个 >.> 进行迁移,因为有人告诉我我需要创建一个新表来规定这种关系。
我刚在想
generate migration project_user project_id :int user_id :int
那是对的吗?
一共需要3个表:users、projects和project_editor_links
您的迁移:
create_table :users do |t|
# user stuff
end
create_table :projects do |t|
t.references :user
# project stuff
end
create_table :project_editor_links |t|
t.references :user
t.references :project
end
要从命令行生成最后一个表:
rails g migration project_editor_links project:references user:references
您的模型应如下所示:
class User < ActiveRecord::Base
has_many :projects
has_many :project_editor_links
has_many :edited_projects, :through => :project_editor_links
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :project_editor_links
has_many :editors, :through => :project_editor_links
end
class ProjectEditorLinks < ActiveRecord::Base
belongs_to :editor, :class_name => 'User', :foreign_key => :user_id
belongs_to :edited_project, :class_name => 'Project', :foreign_key => :project_id
end