2017-11-08 2 views
1

다음을 얻는 최선의 방법에 대해 잘 모르겠습니다.레일스는 has_many 릴레이션에 합류하고 관계가없는 결과를 원합니다.

한 국가에 속한 사용자가 있습니다. 그런 다음 각 국가별로 다르게 배치 할 수있는 몇 가지 범주가 있습니다.

특정 국가의 모든 범주와 위치가있는 배열을 가져오고 싶습니다 (category_position.position, category.name 순). 또한 category_position을 추가하지 않은 카테고리를 목록에 포함하려고합니다. 나는 나에게 위치가 사용자 국가를 위해 추가 한 모든 종류를 제공

categories = Category.joins(:category_position) 
     .where("category_positions.country_id = #{user.country.id}") 

를 사용하여 시도

class Country < ApplicationRecord 

    has_many :category_position 

class Category < ApplicationRecord 

    has_many :category_position 

class CategoryPosition < ApplicationRecord 
    attr_accessible :country_id, :position, :category_id 

    belongs_to :country 
    belongs_to :category 

:

나는 다음과 같은 구조를 가지고있다. 동일한 목록뿐만 아니라 사용자 국가에 대한 위치가 추가되지 않은 모든 카테고리를 어떻게 얻을 수 있습니까?

이상적으로이 목록은 위치 (1,2,3), 이름 (동일한 위치 인 경우) 및 위치가없는 목록 범주의 끝에 정렬해야합니다.

답변

2

나는이 테스트를하지 않은하지만 난 당신이도

를 Where 절

레일 4 레일 5

categories = Category.left_outer_joins(:category_position) 
        .where("category_positions.country_id = #{user.country.id} or category_positions.country_id is NULL") 

에 대한

및 이전을 조정에 가입 왼쪽 외부를 사용하는 것 같아요

categories = Category.joins("left outer join category_positions on category_positions.category_id = categories.id") .where("category_positions.country_id = #{user.country.id} or category_positions.country_id is NULL") 
+0

답장을 보내 주셔서 감사합니다. 나는'또는 category_positions.country_id is NULL '을 추가하면서 시도했지만 여전히 위치가 추가 된 카테고리 만 반환합니다. 나는'categories = category.left_outer_joins (: category_position) .where ("category_positions.country_id가 NULL")'를 시도했지만 아무것도 반환하지 않습니다. category_positions이없는 여러 카테고리가 있더라도 – peroseth