0

categories을 서로 연결할 수 있어야합니다.db 테이블 (category_a_id 및 category_b_id)의 2 열을보기 위해 has_many를 연결하려면 어떻게해야합니까?

나는 연결된 두 범주 중 id을 보유하기 위해 category_a_idcategory_b_id의 두 열이있는 category_links 테이블이 있습니다.

Category.find(1).category_links에 전화 할 수 있고 category_a_idcategory_b_id 열 모두에서 ID가 1 인 모든 레코드를 가져옵니다. 또한 범주가 삭제 된 경우 해당 category_a_id 또는 category_b_id 열에 연결된 경우 category_link db에 관련된 레코드가 삭제됩니다.

현재 category_links 모델에서 나는

belongs_to :category_b, :class_name => :Category 
belongs_to :category_a, :class_name => :Category 

을 가지고 카테고리 DB

has_many(:category_links, :foreign_key => :category_a_id, :dependent => :destroy) 
has_many(:category_links, :foreign_key => :category_b_id, :dependent => :destroy) 

그러나 둘 모두에서 일치하는 ID로 category_b_id 열에서이 유일한 assosiates 기록한다. 따라서 Category.find(1).category_links을 호출하면 category_a_idcategory_b_id에서 일치하는 레코드를 가져 오지 않습니다. 카테고리를 파기하는 경우에도 마찬가지입니다.

어떻게 작동합니까? 범주를 삭제하면 관련된 범주의 두 열을 모두보고 호출합니다. Category.find(1).category_links도 일치하는 레코드에 대해 두 열을 모두 찾습니다.

답변

2

has_many을 통해 그것을 달성하는 간단한 방법은 없습니다,하지만 당신은 멋진 수없는 경우 단지 Category에서 사용자 정의 메소드를 생성 : 그것은 불가능하거나 고려하지 않고 있다면

def category_links 
    @category_links ||= CategoryLinks.where('category_a_id = ? or category_b_id = ?', id, id) 
end 
+0

네는 확실하지 않았다 나는 그것에 관해 아무것도 찾을 수 없었다. 누군가 그것을 듣게되어 기쁘다. 나는이 질문을 하루 동안 열어 두어 다른 대답이 무엇인지 들어 본다. 아무 것도 들어오지 않으면 나는 당신의 대답과 함께 갈 것이다. – Rob