Почему моя функция фильтрации не работает на Heroku, когда она работает на моей машине разработчика?

#ruby-on-rails #ruby-on-rails-3 #heroku

#ruby-on-rails #ruby-on-rails-3 #heroku

Вопрос:

Итак, у меня есть эта страница, которая разбивает на страницы всех участников на моем сайте, и я добавил ссылку на алфавит, чтобы люди могли находить участников по их имени участника. Он отлично работает на моей машине разработчика, но он просто не работает на heroku.

Мой контроллер имеет:

   def artists
     @artists = Member.joins(:member_role).where("member_roles.artist" => true).page(params[:page]).per(20)
     @names = Member.joins(:member_role).where("member_roles.artist" => true).where("membername LIKE ?", "#{params[:letter]}%").page(params[:page]).per(20)

  end
  

и мой взгляд имеет:

   <% ('A'..'Z').each do |a|%>
    <%= link_to a, {:action => :artists, :controller =>:members, :letter => a } %>
  <% end%>


  <% if params[:letter].nil? %>
    <div class="content">
      <%= paginate @artists %>
    </div>

    <ol class="members_list">
    <% @artists.each do |member| %>....
  

Итак, я проверяю, были ли переданы какие-либо параметры, и если их нет, то @artists отображается в противном случае @names . И он отлично работает на моем ноутбуке, но не в heroku

Ответ №1:

Я предполагаю, что это зависит от чувствительности к регистру.

Большинство сборок MySQL, которые, по вашим словам, вы используете, не учитывают регистр.

Postgres по умолчанию учитывает регистр для LIKE. Чтобы обойти это, используйте ILIKE:

 SELECT * FROM foo WHERE name ILIKE '%a%'
  

(Обратите внимание на подстановочный знак «%» вокруг буквы «а»)

Вы действительно должны стараться, чтобы ваша среда разработки была как можно ближе к рабочей, чтобы устранить такого рода ошибки. Используйте Postgres.

Комментарии:

1. Это тормозит в MySQL: ` @names = Member.joins(:member_role). где («member_roles.artist» => true). где(«имя_переписчика ILIKE?», «#{params[:letter.downcase]}%»).page(params[:page]).per(20)`

2. Вы получаете сообщение об ошибке? Используете ли вы подстановочные знаки 5 по обе стороны от вашей строки, которая вам нравится? postgresql.org/docs/8.3/static/functions-matching.html

Ответ №2:

Когда вы говорите, что это не работает — есть ли какие-либо ошибки?

Вы можете попробовать журнал (ы) heroku?), Чтобы увидеть, есть ли какие-либо ошибки.

Какую базу данных вы используете в dev? Вы используете postgres?

Heroku использует postgres, у которого есть некоторые специфические особенности — поэтому, если вы работаете с sqlite или mysql в dev, возможно, вы можете получить другое поведение на Heroku.

И / или используйте postgres локально.

Привет, Крис

PS Heroku советы по переходу на postgres

Комментарии:

1. никаких ошибок, нажатие на букву просто перезагружает страницу как есть ( rtattoos.com/members/artists ? буква = G ) и да, я использую myswl на моей машине разработчика