Heroku Ruby NoMethodError string.capitalize - PullRequest
3 голосов
/ 11 августа 2011

Я использую следующий код для группировки местоположений в зависимости от первой буквы.

mobile_controller:

def index
  @locations = Location.all.group_by{|l| l.name[0].capitalize.match(/[A-Z]/) ? l.name[0].capitalize : "#"}
end

view:

<% @locations.keys.sort.each do |starting_letter| %>
  <%= starting_letter %>
  <% @locations[starting_letter].each do |location| %>
    <%= location.name %>        
  <% end %>
<% end %>

Все отлично работает на моемлокальная машина, но герою не нравится и продолжает показывать мне эту ошибку:

NoMethodError (undefined method `capitalize' for 66:Fixnum):
app/controllers/mobile_controller.rb:13:in `search'
app/controllers/mobile_controller.rb:13:in `search'

Как я могу это исправить?

Заранее спасибо

Решение: Обновлен мой стек Heroku до Ruby 1.9.

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Ваш локальный компьютер установлен на Ruby 1.9, а приложение Heroku работает на 1.8.

В Ruby 1.8 вызов String#[] даст вам код символа (число), тогда как Ruby 1.9 даст вам строку с первым символом.

# Ruby 1.8
"test"[0]
# => 116

# Ruby 1.9
"test"[0]
# => "t"

Вы можете использовать l.name[0..0], чтобы обойти это, или переключиться на стек Ruby 1.9 в Heroku.

2 голосов
/ 11 августа 2011

В Ruby 1.8, String#[] возвращает ASCII-код ссылочного символа, а не сам символ. Попробуйте l.name[0,1].capitalize в вашем контроллере.

...