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
4

2 回答 2

2

试试这个范围

scope :by_labels, lambda{ |tags| joins(:tags).where('tags.label IN (?)',tags) unless tags.blank? }
于 2012-04-05T13:39:54.787 回答
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). 那部分不是必需的。

于 2012-04-05T13:37:52.977 回答