Поиск не учитывает регистр в разработке, но чувствителен в производственной среде

У меня есть панель поиска, которая выполняет поиск без учета регистра при запуске на локальном хосте в среде разработки, но когда я нажимаю на 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 \ Rating_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

Из приложения \ 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

Спасибо!

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.

Другие вопросы по тегам