2012-04-05 6 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(&).where:

2

私はこの`トン= t.scoped(:タグ含める)を試してみた

scope :by_labels, lambda{ |tags| joins(:tags).where('tags.label IN (?)',tags) unless tags.blank? } 
関連する問題