簡體   English   中英

Rails模型中不區分大小寫的高級搜索

[英]Case-insensitive advanced search in Rails model

如何將第一個示例結果應用於第二個示例?

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?

我解決這個

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?

請告訴我這是對是錯

為避免錯誤,請在和中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

您可能已經知道或需要知道此請求的處理速度將非常慢

我拆分了您的代碼以確保您真正想要的是

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?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM