我有一个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 :(得分: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)
。那部分没有必要。