0

모델 B와 1 대 1 연관성을 갖는 모델 A가 있다고 가정 해 보겠습니다. 모델 B는 'acts_as_taggable'로 설정됩니다. B 속성의 모든 A 인스턴스를 특정 문자열로 태그 지정된 _을 선택하는 활성 레코드 관계를 반환하고 싶습니다. A.where ('b.tagged_with =?', 'some_tag')레일스 : acts-as-taggable-on : 관계에 tagged_with 사용

나는 this이라는 질문을 발견했지만 적극적인 레코드 관계를 되 찾는 데는 두 번째 솔루션 만 관심이 있습니다. 적용 가능하고 작동하도록 할 수 없습니다. 내가 다른 쿼리 매개 변수 메서드를 호출 할 수 있도록 활성 레코드 관계를 다시 가져 오려면 어떻게해야합니까? . b_tagged_with가

답변

0

내 자신의 질문에 대답하기 위해 명명 된 범위입니다 (...) ('태그') A.b_tagged_with, A의 내 범위 정의는 다음과 같습니다

scope :tagged_with, lambda { |tag| 
    { 
     :joins => "INNER JOIN taggings ON taggings.taggable_id = as.b_id\ 
        INNER JOIN tags ON tags.id = taggings.tag_id AND taggings.taggable_type = 'B'", 
     :conditions => ["tags.name = ?", tag] 
    } 
    } 

이 말씀 tagGings의 태그 연관에 전달 된 param과 동일한 'name'값이있는 경우 b 멤버가 태그 지정과 연결된 모든 A 모델을 반환합니다.이 예제에서는 B 'acts_as_taggable', A는 없습니다. 이렇게하면 다음을 할 수 있습니다.

a = A.new 
b = B.new 
b.tag_list = ['tag1', 'tag2', 'tag3']  
a.b = b 
new_a = A.tagged_with('tag1').ordered(... 
#At this point new_a.last == a 
관련 문제