1
나는 completly 잊었

, 하룻밤, 관계의 이러한 유형의 마이그레이션을 생성하는 방법 : I 프로젝트 테이블과 사용자 테이블이는이 관계에 대한 마이그레이션을 만드는

각 사용자는 자신이 만든 자신의 프로젝트를 가지고 프로젝트를 만들거나 편집 할 때 사용자가 프로젝트를 공유 할 수있는 방법은 다음과 같습니다.

각 프로젝트는 많은 사용자를 보유 할 수 있으며 각 사용자는 많은 프로젝트를 보유하고 프로젝트에 속합니다.

문제가 있습니까?

이 관계를 규정하기 위해 새 테이블을 만들어야한다고 들었으므로이 방법으로 마이그레이션하는 방법을 모르겠습니다.

나는

generate migration project_user project_id :int user_id :int 

가 언제 어디 옳다 생각?

답변

3

당신은 3 개 테이블의 총 필요합니다 : 사용자, 프로젝트 및 project_editor_links

귀하의 마이그레이션 :

rails g migration project_editor_links project:references user:references 

:

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  

명령 줄에서 마지막 테이블을 생성하려면 모델은 다음과 같이 표시되어야합니다.

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 : references'는'model_id : integer'와 기본적으로 같습니다. 따라서 외부 키를 추가하지 않습니다 (현재). 유일한 장점은 가독성입니다. – PinnyM