首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4用错误的绑定变量搜索单独的关键字(1对2)

问Rails 4用错误的绑定变量搜索单独的关键字(1对2)
EN

Stack Overflow用户
提问于 2014-12-18 15:39:32
回答 1查看 648关注 0票数 1

我有这个试探性的搜索功能,但是,它仅限于搜索一个关键字块。

代码语言:javascript
复制
  def self.search(search)
    search_condition = "%" + search + "%"
    active.where("lower(title) LIKE ?", search_condition.downcase)
  end

我有一个标题:“彼得·保罗·玛丽”

如果我搜索“彼得·玛丽”,它就不会出现。

我发现这段代码很有用在这个岗位上

代码语言:javascript
复制
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呢?

更新:

我变成了这样的人:

代码语言:javascript
复制
  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

但是它会引发这样的错误:

代码语言:javascript
复制
ActiveRecord::PreparedStatementInvalid (wrong number of bind variables (1 for 2) in: (lower(title) LIKE ? ) OR (lower(title) LIKE ? )):

,请通知.

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 16:13:33

如果你碰巧在你的应用程序中使用Postgres,那么你可以很容易地利用PG的全文搜索功能使用搜索宝石。

您还可以插入诸如Solr或ElasticSearch这样的框架来提供此功能,但它们将增加您的开发工作量。

PG和MySQL都有模式匹配函数,允许您根据搜索值中的正则字符串进行搜索。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27550299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档