首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heroku Ruby NoMethodError string.capitalize

Heroku Ruby NoMethodError string.capitalize
EN

Stack Overflow用户
提问于 2011-08-11 15:02:35
回答 2查看 643关注 0票数 3

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

mobile_controller:

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

意见:

代码语言:javascript
复制
<% @locations.keys.sort.each do |starting_letter| %>
  <%= starting_letter %>
  <% @locations[starting_letter].each do |location| %>
    <%= location.name %>        
  <% end %>
<% end %>

在我的本地机器上一切都很好,但是heroku不喜欢它,并一直向我展示这个错误:

代码语言:javascript
复制
NoMethodError (undefined method `capitalize' for 66:Fixnum):
app/controllers/mobile_controller.rb:13:in `search'
app/controllers/mobile_controller.rb:13:in `search'

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

提前感谢

解决方案:将我的Heroku更新为Ruby1.9。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 15:07:20

您的本地机器可能在Ruby1.9上,您的Heroku应用程序运行在1.8上。

在Ruby1.8中,调用String#[]将为您提供字符代码(一个数字),而Ruby1.9将为您提供一个带有第一个字符的字符串。

代码语言:javascript
复制
# Ruby 1.8
"test"[0]
# => 116

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

您可以使用l.name[0..0]绕过这个问题,也可以切换到Heroku上的Ruby1.9堆栈。

票数 5
EN

Stack Overflow用户

发布于 2011-08-11 15:08:24

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7028209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档