1

단순히 새 연결을 추가 할 수 있습니까?레일 : 객체를 만들지 않고 새 has_and_belongs_to_many 연관을 추가 하시겠습니까?

has_and_belongs_to_many를 통해 두 개의 객체가 묶여 있습니다. 모델 A은 항상 고유하지만 대응하는 모델 B은 이미 데이터베이스에있을 수 있습니다. 또는 - - 더 적절한 모델 B 오브젝트가 존재하지 않는 경우 가서 만들 모델은 내가 모델 B에게 객체를 해당 찾아 두 모델을 함께 묶어 레일에게 어떻게 만들어

그것? .where 조회와 SQL 조회를 수행하여 두 ID를 조인 테이블에 추가해야합니까, 아니면이를 수행하기위한 원시 ActiveRecord 메소드가 있습니까?

+0

이 경우 많은 - 많은 관계처럼 들리지는 않습니다. 그렇다면 model_a_id 및 model_b_id가 포함 된 조인 테이블을 작성해야하며 단순히 model_b의 외래 키가 아니어야합니다. – Gazler

+0

@Gazier 그것을 지적 해 주셔서 감사합니다. 나는이 질문을 다시 썼습니다. – Marco

답변

1

레일 연관은 제한된 방식으로 모델을 연결합니다. 사용자 및 게시 모델이 있다고 가정합니다. 사용자 has_many 연관 협회는 단순히 인터페이스를 생성합니다. 이제 해당 인터페이스를 사용하여 다음을 수행 할 수 있습니다.

user.posts 

그러면 사용자의 모든 게시물이 반환됩니다. 게시물을 추가하거나 찾으려면 다음을 실행하십시오.

Post.find_or_create_by_user_id(...) 

그러면 게시물을 찾거나 생성 할 수 있습니다.

또한 예를 들어, 일대 다 (one to many) 연관을 언급합니다. 따라서 has가 필요없고 많은 연관에 속하지만 has_many/belongs_to가 있습니다.

2
# the piece from create action of ProductsController 
categories = Array.new(@product.categories) 
@product.categories.clear 
categories.each do |c| 
    @product.categories << Category.find_or_create_by_name(c.name) 
end 
# ready to @product.save 
관련 문제