我的模型中有以下内容来搜索用户输入的字符串:
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来保护不区分大小写。然后它工作得更好。我仍然喜欢下面的答案,因为它也有助于改进我的语法。
答案 0 :(得分:1)
嘿,我也在我的项目中使用这种类型的搜索逻辑,我已经这样做了。如果您想尝试一下,看看它是否对您有所帮助 - :
class << self
def search(query)
product = "%#{query}%"
where("name LIKE ? AND locale =?", product,I18n.locale)
end
end
由于
答案 1 :(得分:0)
我注意到你正在使用大写。您确定产品名称的格式与存储数据的方式完全相同吗?可能是代码返回“卡片指南”,但您的数据需要“卡片指南”吗?