【问题标题】:MySQL syntax in Rails 3, NOT Case sensitive searching, not working on Heroku?Rails 3中的MySQL语法,不区分大小写搜索,不适用于Heroku?
【发布时间】:2011-01-12 18:56:03
【问题描述】:

我一直在关注 Railscast,为我的应用程序添加搜索、排序和分页。我修改了模型中的搜索逻辑以搜索列(描述和标题)。这似乎奏效了。我也将其更改为搜索不区分大小写。这在我的本地应用程序中似乎很完美,但是当我将它推送到 heroku 时,我只能按小写字母进行搜索。使用任何大写字母进行搜索都不会产生任何结果,即使大小写匹配结果也是如此。

这是我模型中的代码:

  def self.search(search)
    if search
      where('LOWER (description) LIKE ? OR LOWER (title) LIKE ?', "%#{search}%" , "%#{search}%")
    else
      scoped
    end
  end

【问题讨论】:

  • 我不确定这是你的问题,但是 heroku 使用 Postgres,所以任何 MySQL 特定的语法都不起作用(但是我不知道其中任何一个是 mysql 特定的) .
  • 这应该不是问题:Postgres 还有一个 LOWER 函数。

标签: mysql ruby-on-rails ruby ruby-on-rails-3 heroku


【解决方案1】:

试试

where("LOWER (description) LIKE ? OR LOWER (title) LIKE ?", "%#{search.downcase}%" , "%#{search.downcase}%")

【讨论】:

  • 感谢大卫,但不幸的是,这返回了 MySQL 语法错误
  • 我编辑了我的回复(我误读了你的问题)。这个查询有效吗?
  • 仅供参考,问题在于您将字符串与(强制)小写数据库值进行比较。如果您的字符串包含大写字符,则比较将失败。使用此查询,您还可以强制搜索函数参数为小写,从而确保匹配(因为两个字符串都保证为小写)。
【解决方案2】:

我也有这个问题。 Heroku 使用 PostgreSQL 和 LIKE-Operator 强类型为字符串。检查这个http://www.postgresql.org/docs/8.3/interactive/functions-matching.html

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多