2012-04-05 2 views
0

Ticket 모델의 모델은 has_many :tags입니다. tag.label이 문자열 배열에있는 태그가있는 티켓을 모두 찾고 싶습니다.모델을 자식으로 필터링하기

이 같은
tags = params[:tags].split(',') 
if tags.count > 0 then 
    t = t.scoped(include: :tag).where('tags.label' => tags.map(&:label)) 
end 
+0

이 범위를보십시오 –

답변

1

뭔가 작동합니다 : 여기

내가 순간에 노력하고있어입니다

Ticket.joins(:tags).where(:tags => { :label => array_of_strings }) 

또는 범위로 :

scope :by_labels, lambda { |tags| joins(:tags).where(:tags => { :label => tags }) unless tags.blank? } 

미하일의 문제 Nikalyukin의 해답은 .map(&:label)입니다. 그 부분은 필요하지 않습니다. `: (레이블) 'tags.label'=> tags.map (&) 어디에요 :

2

내가이`t = t.scoped (: 태그 포함)를 시도했습니다

scope :by_labels, lambda{ |tags| joins(:tags).where('tags.label IN (?)',tags) unless tags.blank? } 
관련 문제