1

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

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

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

проблема?

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

Я думал

generate migration project_user project_id :int user_id :int 

что где-либо право?

ответ

3

Вам нужно всего 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 
+0

У меня первые две таблицы, третий я смущен. Что: ссылки? foriegn ключ? – TheWebs

+0

См. [Здесь] (http://guides.rubyonrails.org/migrations.html#special_helpers). 'model: reference' в основном совпадает с' model_id: integer', если это отношение не является полиморфным. Таким образом, нет, он не будет добавлять внешний ключ (в это время); его единственным преимуществом является читаемость. – PinnyM

Смежные вопросы