Ruby on Rails:仅在第一场比赛中获胜

时间:2019-07-16 13:08:06

标签: ruby-on-rails parameters

在哪里找到第一个匹配项并显示,但之后不显示任何内容。如何更改此项以查找和显示所有匹配项?不只是第一个发现的结果。

示例:查找并显示优惠券“ 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

所需结果:根据搜索条件返回完整的结果列表,而不仅仅是第一个结果。

1 个答案:

答案 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