由子项过滤模型

时间:2012-04-05 13:26:53

标签: ruby-on-rails activerecord

我有一个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

2 个答案:

答案 0 :(得分:2)

试试这个范围

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

答案 1 :(得分:1)

这样的事情应该有效:

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

或作为范围:

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

Mikhail Nikalyukin解决方案的问题是.map(&:label)。那部分没有必要。