2017-04-24 7 views
1

나는 생성시 테이블과 has_many 관계를 만들려고하고 이미 생성 된 다른 테이블에도 추가하려고합니다.두 테이블에서 has_many 관계를 수행하는 방법은 무엇입니까?

나는 이미 관계가없는 내 User 테이블을 가지고 있습니다.

관계가 has_many UserPro_user을 만들고 싶습니다.

것은 하나 User 여러 Pro_user을 가질 수 있다는 것입니다과 Pro_user 또한 여러 User을 가질 수 있습니다.

그래서 두 테이블 모두 has_many이 필요합니까?

그래서 제가 생각하는 것은

rails g model pro_user name:string email:string password_digest:string user:references

는하지만 그것은 User

Pro_user에서 belongs_to을하고 또한 내가 뭘해야 할 방법을 추가 할 것, 옳은 일이 아니라고했다 내 기존 테이블에 has_many가 User? 테이블을 다시 만들고 관계를 추가하려면 마이그레이션을 수행해야합니까?

도움 주셔서 감사합니다.

답변

3

many to many 연관에 대한 권장 접근법은 "has_many_through"접근 방식입니다. 이렇게하면 더 많은 데이터가 필요하면 나중에 조인 테이블에 열을 추가 할 수 있습니다. 사용자 및 사용자 테이블에 최소한 두 개의 참조 열과 표준 ID 열이있는 조인 테이블이 필요합니다. (http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association 참조)

따라서 User 테이블과 ProUser 테이블에는 참조 열이 없습니다.

create_table :boats_and_pros do |t| 
     t.belongs_to :user, index: true 
     t.belongs_to :pro_user, index: true 
     t.timestamps 
    end 

그런 다음 해당 boats_and_pros.rb 모델 파일에 추가합니다 : 대신 세 번째 테이블 BoatsAndPros을 (당신이 원하는대로 호출) 전화를 할 수 있도록하겠습니다

belongs_to :user 
belongs_to :pro_user 

을에 user.rb 파일 당신은 추가 할 것입니다 :

has_many :boats_and_pros 
has_many :pro_users, through: :boats_and_pros 

당신의 pro_user.rb 모델 파일에 추가합니다

  • 은 "oldschool"has_and_belongs_to_many 접근 방식은 공간이 여기에 has_many_through 접근 방식처럼 성장하는 것을 허용하지 않습니다 그러나 아직 유효하고 특히 테이블 pro_users_users 때문에 이름을 지정해야합니다 :
    has_many :boats_and_pros 
    has_many :users, through: :boats_and_pros 
    

    두 가지 핵심 테이크 아웃은 Rails는 두 테이블이 어휘 순서로 나열 될 것으로 기대합니다.

  • 원래 시도에서 끝난 것과 같은 일대 다 관계는 테이블 중 하나에서 참조를 유지하는 반면, 다 대다 관계는 위에 표시된 것처럼 세 번째 조인 테이블을 필요로합니다.