2012-04-05 62 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

我已经试过这'吨= t.scoped(包括:标签)。凡( 'tags.label'=> tags.map(&:标签))' – 2012-04-05 13:32:37

回答

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)。这部分是没有必要的。

2

尝试此范围

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