2011-09-08 61 views
0

我已经在我的模型下面的搜索用户输入的字符串:如何解决这个搜索方法

def self.find_products(product="") 

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

但它只能如果字符串是一个词。 如果字符串包含两个或更多单词(如“卡片指南”),则即使这些单词是名称中的确切单词,它也不会返回任何内容。

如何正确执行此搜索。

的Rails的Ruby 3 1.9.2

更新

事实证明,它的一个PostgreSQL语法。我需要使用iLIKE来区分大小写。然后它运作得更好。我仍然喜欢下面的答案,因为它也有助于完善我的语法。

回答

1

嘿,我也在矿山项目中使用这种类型的搜索逻辑,我这样做了。如果您想尝试再看看它是否可能帮助你 - :

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

感谢

+0

谢谢Vivek帮助了很多 – chell

0

我注意到你正在使用大写。您确定产品名称的格式与您存储数据的方式完全相同吗?难道是代码返回“卡导游”,但你的数据预计“卡导游”?