根据第一个字母,我使用以下代码对位置进行分组。
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更新为Ruby1.9。
发布于 2011-08-11 15:07:20
您的本地机器可能在Ruby1.9上,您的Heroku应用程序运行在1.8上。
在Ruby1.8中,调用String#[]将为您提供字符代码(一个数字),而Ruby1.9将为您提供一个带有第一个字符的字符串。
# Ruby 1.8
"test"[0]
# => 116
# Ruby 1.9
"test"[0]
# => "t"您可以使用l.name[0..0]绕过这个问题,也可以切换到Heroku上的Ruby1.9堆栈。
发布于 2011-08-11 15:08:24
在Ruby1.8下,String#[]返回引用字符的ASCII代码,而不是字符本身。在您的控制器中尝试l.name[0,1].capitalize。
https://stackoverflow.com/questions/7028209
复制相似问题