Rails模型中不区分大小写的高级搜索

时间:2018-04-13 09:32:14

标签: ruby-on-rails ruby ruby-on-rails-3

如何将第一个示例结果应用于第二个示例?

1)Rails模型中的不区分大小写的搜索结果

 self.where("LOWER(shop_name) like ?", "%#{search.downcase}%")

2)高级搜索

shops =Shop.where("shop_name LIKE '%#{keywords}%' AND shop_city LIKE '%#{keywords2}%' AND shop_country LIKE '%#{keywords3}%' AND market_type LIKE '%#{keywords4}%'") if keywords||keywords2||keywords3||keywords4.present?

3 个答案:

答案 0 :(得分:0)

我解决了这个问题

shops =Shop.where("LOWER(shop_name) LIKE '%#{keywords.downcase}%' AND LOWER(shop_city) LIKE '%#{keywords2.downcase}%' AND LOWER(shop_country) LIKE '%#{keywords3.downcase}%' AND LOWER(market_type) LIKE '%#{keywords4.downcase}%'") if keywords.downcase||keywords2.downcase||keywords3.downcase||keywords4.downcase.present?

请告诉我这是对还是

答案 1 :(得分:0)

为了避免错误更改你的if和2)替换||通过&&

shops =Shop.where("shop_name LIKE '%#{keywords}%' AND shop_city LIKE '%#{keywords2}%' AND shop_country LIKE '%#{keywords3}%' AND market_type LIKE '%#{keywords4}%'") if keywords && keywords2 && keywords3 && keywords4

您可能已经知道或者您需要知道此请求处理速度非常慢

答案 2 :(得分:0)

我拆分你的代码以确定你真正想要的是什么

query = ''
query << 'LOWER(shop_name) LIKE :keywords '
query << 'AND LOWER(shop_city) LIKE :keywords2 '
query << 'AND LOWER(shop_country) LIKE :keywords3 '
query << 'AND LOWER(market_type) LIKE :keywords4'

shops = Shop.where(
  query,
  keywords: keywords.downcase || '',
  keywords2: keywords2.downcase || '',
  keywords3: keywords3.downcase || '',
  keywords4: keywords4.downcase || '',
) unless keywords.blank? && keyword2.blank? && keywords3.blank? && keywords4.blank?