3 Stimmen

Heroku Ruby NoMethodError string.capitalize

Ich verwende den folgenden Code, um Orte je nach Anfangsbuchstabe zu gruppieren.

mobile_controller:

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

Ansicht:

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

Auf meinem lokalen Rechner funktioniert alles einwandfrei, aber heroku mag es nicht und zeigt mir immer wieder diesen Fehler an:

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

Wie kann ich das beheben?

Vielen Dank im Voraus

Lösung: Ich habe meinen Heroku-Stack auf Ruby 1.9 aktualisiert.

5voto

Dylan Markow Punkte 120337

Ihr lokaler Rechner arbeitet wahrscheinlich mit Ruby 1.9, und Ihre Heroku-Anwendung läuft mit 1.8.

In Ruby 1.8 wird der Aufruf von String#[] liefert den Zeichencode (eine Zahl), während Ruby 1.9 eine Zeichenkette mit dem ersten Zeichen liefert.

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

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

Sie können verwenden l.name[0..0] um dies zu umgehen, oder wechseln Sie zu einem Ruby 1.9-Stack auf Heroku.

2voto

Chowlett Punkte 44504

Unter Ruby 1.8, String#[] gibt den ASCII-Code des referenzierten Zeichens zurück und nicht das Zeichen selbst. Versuchen Sie l.name[0,1].capitalize in Ihrem Controller.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X