在Rails 3.0中搜索多个db列

时间:2011-03-24 16:38:47

标签: ruby-on-rails search

我正在尝试编写一个搜索2 db列并返回结果的语句。如果不使用像Searchlogic这样的宝石,这可以轻松完成吗?

def self.search(search)
  if search
    find(:all, :conditions => ['city LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

到目前为止我所做的是一个在我的数据库的city字段上执行搜索的语句。但是,我想提供功能来涵盖按州搜索的情况。

因此,如果某人键入“CA”,搜索将返回加利福尼亚州的每个商家信息。如果用户键入“洛杉矶”,将返回洛杉矶的列表。简而言之,我想同时查询2个db字段并返回适当的结果。这可以用简单的陈述来完成吗?

1 个答案:

答案 0 :(得分:5)

最好的办法是实现像solr或sphinx这样的全文解决方案。或者,如果您现在想要保持尽可能简单的事情,您只需或搜索:

def self.search(search)
  if search
    find(:all, :conditions => ['city LIKE ? OR state LIKE ?', ["%#{search}%"]*2].flatten)
  else
    find(:all)
  end
end

更新:语法替代(更好)通过Jeffrey W.

find(:all, :conditions => ['city LIKE :search OR state LIKE :search', {:search => "%#{search}%"}])