2014-12-16 2 views
0

나는 product 테이블과 line_items 테이블을 가지고 있습니다.레일에 조인 테이블을 통해 연결하지 않는 경우

product 참여 테이블 product_line_items을 통해 has_and_belongs_to_many line_items.

line_item ID 6에 표시되지 않는 모든 제품을 나에게 돌려 줄 수있는 쿼리를 어떻게 작성합니까?

나는의 라인을 따라 뭔가 생각하고 있어요 :

Product.joins(:line_items).where.not(line_items: {id: 6}) 

을하지만 내부 조인하고있어 이것은 나에게 행이 반환되지 않고 내 제품을 실제로 아무도 지금 광고 항목에 없습니다 ..

간단한 방법으로이 글을 쓸 수 있습니까? 아니면 왼쪽 join 쿼리를 사용해야합니까?

그래서 line_item ID 6에 표시되지 않은 모든 제품 (광고 항목에 전혀 등장하지 않은 제품 포함)을 찾고 싶습니다. 내가 발견하지 못한 쉬운 쿼리 구문이 있습니까?

감사합니다. v. much.

+0

line_item의 ID가 6이라는 것은 무엇을 의미합니까? 제품과 line_items 간의 모든 연관을 기록하는 line_items_products 테이블이 있다고 가정합니다. 광고 항목 ID가 3이면 연결을 수행하는 테이블의 line_item_id 필드 또는 uniq id 필드입니까? – Typpex

+0

@Typpex 안녕하세요, 예, 내가 조인 테이블입니다 product_line_items 테이블을 언급했다. 6의 line_item.id는 특히 line_items 테이블 ID 열과 관련됩니다. 감사. – neiled

답변

0

line_items_products의 ID가 당신에게 쓸모가 없기 때문에 왜 그런지 알고 싶지 않습니다.

하지만 활성 레코드에이 작업을 수행 할 수 있습니다 :

Product.where.not(id: line_item_6.products.map(&:id)) 

가 가지고있는 line_item 모델에 대한 참조가 될 것 line_item_6을 있었다 : 관심있는 사람들을 위해 I 있도록

Product.joins(line_items).where("line_items_products.id <> ?", 6) 
0

OK 내가하고 결국 ID는 6입니다.

관련 문제