如何修复此搜索方法

时间:2011-09-08 17:18:04

标签: sql ruby-on-rails-3

我的模型中有以下内容来搜索用户输入的字符串:

def self.find_products(product="")

    find(:all, :select => 'product_id, name', :order => "name", :conditions => ["name like ? and locale =?", "%#{product.capitalize}%", I18n.locale])
  end

但它只有在字符串是一个单词时才有效。 如果字符串包含两个或多个单词,例如“卡片指南”,则即使它们是名称中的确切单词,也不会返回任何内容。

如何正确搜索。

Rails 3 Ruby 1.9.2

更新

事实证明它是Postgresql语法。我需要使用iLIKE来保护不区分大小写。然后它工作得更好。我仍然喜欢下面的答案,因为它也有助于改进我的语法。

2 个答案:

答案 0 :(得分:1)

嘿,我也在我的项目中使用这种类型的搜索逻辑,我已经这样做了。如果您想尝试一下,看看它是否对您有所帮助 - :

class << self
   def search(query)
    product = "%#{query}%"
    where("name LIKE ? AND locale =?", product,I18n.locale)
   end
end

由于

答案 1 :(得分:0)

我注意到你正在使用大写。您确定产品名称的格式与存储数据的方式完全相同吗?可能是代码返回“卡片指南”,但您的数据需要“卡片指南”吗?