为此关系创建迁移

时间:2012-11-21 21:26:32

标签: ruby-on-rails ruby ruby-on-rails-3 migration relationship

我完全忘了,过夜,如何为这种关系创建迁移:

我有一个项目表和一个用户表,每个用户都有自己的项目,他们创建了用户可以在创建或编辑项目时共享他们创建的项目,因此关系是:

每个项目可能有很多用户并且属于用户,而每个用户都有很多项目并且属于项目。

问题?

我不确定如何从此>进行迁移。>据我所知,我需要创建一个新表来规定这种关系。

我在想

generate migration project_user project_id :int user_id :int

那是对的吗?

1 个答案:

答案 0 :(得分:3)

您总共需要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