在哪里找到第一个匹配项并显示,但之后不显示任何内容。如何更改此项以查找和显示所有匹配项?不只是第一个发现的结果。
示例:查找并显示优惠券“ test1”,但不通过搜索“ test”来收集“ test2”或“ test3”优惠券。
def self.note_search(params)
matches = Coupon.all
params.each do |key, val|
case key
when 'from'
if val.present? && params[:to].present?
from = Time.parse(params[:from]).beginning_of_day
to = Time.parse(params[:to]).end_of_day
matches.where!(created_at: from..to)
end
when 'coupon'
if val.present?
val.split(' ').each do |t|
t = "%#{t.downcase}%"
matches.where!("lower(title) LIKE ? or lower(coupon) LIKE ?", t, t )
end
end
end
end
matches
end
所需结果:根据搜索条件返回完整的结果列表,而不仅仅是第一个结果。
答案 0 :(得分:2)
您仅获得一个值,因为迭代器返回上一次迭代的结果。应该是:
when 'promo_code'
return unless val.present?
query = val.split(' ').map { |term| "%#{term.downcase}%" }
matches.where("LOWER(title) LIKE ANY(ARRAY[?]) OR LOWER(coupon) LIKE ANY(ARRAY[?])", query, query)
end