создание миграции для этого отношения

Я совершенно забыл за ночь, как создать миграцию для этого типа отношений:

У меня есть таблица проекта и таблица пользователей, и у каждого пользователя есть свои собственные проекты, которые они создают, как только пользователи могут делиться проектом, который они создают либо при создании, либо при редактировании проекта, поэтому отношение таково:

каждый проект может иметь много пользователей и принадлежать пользователю, в то время как каждый пользователь имеет много проектов и принадлежит проекту.

эта проблема?

Я не уверен, как выполнить миграцию из этого >.>, поскольку мне сказали, что мне нужно создать новую таблицу, чтобы установить эту связь.

я подумал

generate migration project_user project_id :int user_id :int

это где-то правильно?


person TheWebs    schedule 21.11.2012    source источник


Ответы (1)


Всего вам нужно 3 таблицы: пользователи, проекты и 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
person PinnyM    schedule 21.11.2012
comment
Я получил первые две таблицы, а третья меня смущает. что: ссылки? чужой ключ? - person TheWebs; 22.11.2012
comment
См. здесь. model:references в основном такой же, как model_id:integer, если отношение не является полиморфным. Итак, нет, он не добавит внешний ключ (в настоящее время); его единственное преимущество - читабельность. - person PinnyM; 22.11.2012