Heroku Ruby NoMethodError string.capitalize

发布于 2024-11-29 06:07:26 字数 794 浏览 0 评论 0原文

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

mobile_controller:

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。

I use the following code to group locations depending on the first letter.

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 %>

Everything works fine on my local machine, but heroku doesn't like it and keeps showing me this error:

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

How can I fix this?

Thanks in advance

Solution:
Updated my Heroku Stack to Ruby 1.9.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野味少女 2024-12-06 06:07:26

您的本地计算机可能运行在 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 堆栈。

Your local machine is probably on Ruby 1.9, and your Heroku app is running on 1.8.

In Ruby 1.8, calling String#[] will give you the character code (a number), whereas Ruby 1.9 will give you a string with the first character.

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

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

You can use l.name[0..0] to get around this, or switch to a Ruby 1.9 stack on Heroku.

倾听心声的旋律 2024-12-06 06:07:26

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

Under Ruby 1.8, String#[] returns the ASCII code of the referenced character rather than the character itself. Try l.name[0,1].capitalize in your controller.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文