Rails helper module undefined方法`sort'

时间:2010-04-12 16:16:28

标签: ruby-on-rails ruby

我正在尝试在rails中创建一个简单的帮助器模块,并且我对来自我的新人员表单(app / views / people / new.html.erb)的以下错误消息感到难过:

undefined method `sort' for 97:Fixnum

Extracted source (around line #17):

14:   <p>
15:         <% nations = { 'United States of America' => 'USA', 'Canada' => 'Canada', 'Mexico' => 'Mexico', 'United Kingdom' => 'UK' } %>
16:     <%= f.label :country %><br />
17:         <%= radio_buttons(:person, :country, nations) %>
18:         
19:   </p>
20:   <p>

radio_buttons是我为我的视图创建的辅助模块。这是(app / helpers / people_helper.rb):

module PeopleHelper 

def radio_buttons(model_name, target_property, button_source) 
  html='' 
  list = button_source.sort 
  list.each do |x| 
    html << radio_buttons(model_name, target_property, x[1]) 
    html << h(x[0]) 
    html << '<br />' 
  end 
  return html 
end 

end

问题似乎出现在“list = button_source.sort”上,但我不确定为什么它说该方法未定义。我已经能够在我的视图代码中直接使用它。我无法在辅助模块中使用这样的方法吗?我需要包含一些内容吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在行html << radio_buttons(model_name, target_property, x[1])中,该方法以递归方式调用自身。这次第三个参数不再是哈希值,而x[1]是一个Fixnum。由于Finxums不响应sort,您会收到错误。

答案 1 :(得分:0)

undefined method 'sort' for 97:Fixnum表示97({1}}的实例没有Fixnum方法。出于某种原因,方法中的参数sort将以整数形式出现。

快速解决方法是写button_sourcelist = Array(button_source).sort会强制button_source Array,因为Array是最常见的sort类} 方法。如果button_source已经是Array,则不会更改任何内容。