3

我使用以下代码根据第一个字母对位置进行分组。

移动控制器:

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

看法:

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

在我的本地机器上一切正常,但 heroku 不喜欢它并不断向我显示此错误:

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

我怎样才能解决这个问题?

提前致谢

解决方案: 将我的 Heroku Stack 更新为 Ruby 1.9。

4

2 回答 2

5

您的本地计算机可能在 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]来解决这个问题,或者切换到 Heroku 上的 Ruby 1.9 堆栈。

于 2011-08-11T15:07:20.843 回答
2

在 Ruby 1.8 下,String#[]返回被引用字符的 ASCII 码而不是字符本身。试试l.name[0,1].capitalize你的控制器。

于 2011-08-11T15:08:24.943 回答