我正在尝试在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”上,但我不确定为什么它说该方法未定义。我已经能够在我的视图代码中直接使用它。我无法在辅助模块中使用这样的方法吗?我需要包含一些内容吗?
感谢您的帮助!
答案 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_source
,list = Array(button_source).sort
会强制button_source
Array
,因为Array
是最常见的sort
类} 方法。如果button_source
已经是Array
,则不会更改任何内容。