【问题标题】:Search is case insensitive in development but sensitive in production environment搜索在开发中不区分大小写,但在生产环境中敏感
【发布时间】:2013-01-10 09:43:53
【问题描述】:

我有一个搜索栏,在开发环境中在 localhost 上运行时执行不区分大小写的搜索,但是当我推送到 Heroku 并在生产环境中运行时,搜索是区分大小写的。不确定是什么导致了这种行为。

来自 app\views\layouts\application.html.erb:

<form class="navbar-search pull-right">
    <input type="text" class="search-query span3" placeholder="Find Some Beers" name="search">
</form>

来自 app\controllers\ratings_controller.rb:

def search
    fff = Rating.search(params[:search])
    @ratings_by_name = fff.paginate(:order => 'name ASC', :page => params[:page], :per_page =>10)
    @ratings_by_score = fff.paginate(:order => 'score DESC', :page => params[:page], :per_page =>10)
end

来自 app\models\rating.rb:

def self.search(query)
    words = query.to_s.strip.split
    words.inject(scoped) do |combined_scope, word|
    combined_scope.where("name LIKE ?", "%#{word}%")
    end
end

谢谢!

【问题讨论】:

  • 您是否在开发和生产中使用不同的数据库(例如,开发中的 sqlite 和生产中的 postgres)?
  • 您使用的是哪种数据库?如果是mysql,请提供SELECT TABLE_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS; 表评分。

标签: ruby-on-rails heroku production-environment case-insensitive dev-to-production


【解决方案1】:

Heroku 使用 postgres,请确保您也在开发中使用 postgres。

使用 ILIKE postgres 不区分大小写的 LIKE 版本

combined_scope.where("name ILIKE ?", "%#{word}%")

http://www.postgresql.org/docs/9.1/static/functions-matching.html

根据活动区域设置,可以使用关键字 ILIKE 代替 LIKE 使匹配不区分大小写。这不在 SQL 标准中,而是 PostgreSQL 扩展。

【讨论】:

  • 感谢您的帮助!在开发中切换到 postgres,实现了 ILIKE,现在效果很好。
猜你喜欢
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多