我有这个试探性的搜索功能,但是,它仅限于搜索一个关键字块。
def self.search(search)
search_condition = "%" + search + "%"
active.where("lower(title) LIKE ?", search_condition.downcase)
end我有一个标题:“彼得·保罗·玛丽”
如果我搜索“彼得·玛丽”,它就不会出现。
我发现这段代码很有用在这个岗位上
def self.search(search)
if search
search_length = search.split.length
find(:all, :conditions => [(['name LIKE ?'] * search_length).join(' AND ')] + search.split.map { |name| "%#{name}%" })
else
find(:all)
end
end不幸的是,它在较旧的rails中。
那么,如何将其转换为rails 4呢?
更新:
我变成了这样的人:
def self.search(str)
search = str.split.map{|w| "(lower(title) LIKE ? )"}.join(" OR ")
values = str.split.map{|w| "%#{w.downcase}%"}.map(&:inspect).join(', ')
.where("#{search}", values)
end但是它会引发这样的错误:
ActiveRecord::PreparedStatementInvalid (wrong number of bind variables (1 for 2) in: (lower(title) LIKE ? ) OR (lower(title) LIKE ? )):,请通知.
发布于 2014-12-18 16:13:33
如果你碰巧在你的应用程序中使用Postgres,那么你可以很容易地利用PG的全文搜索功能使用搜索宝石。
您还可以插入诸如Solr或ElasticSearch这样的框架来提供此功能,但它们将增加您的开发工作量。
PG和MySQL都有模式匹配函数,允许您根据搜索值中的正则字符串进行搜索。
https://stackoverflow.com/questions/27550299
复制相似问题