2010-04-12 104 views
0

我想在rails中創建一個簡單的輔助模塊,而且我很難從我的新人形式(app/views/people/new.html)中獲取以下錯誤消息。 erb):Rails幫助模塊undefined方法`排序'

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是我爲我的視圖創建的幫助器模塊。這是(應用程序/傭工/ 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 

的問題似乎是在「名單= button_source.sort」,但我不知道爲什麼它說的方法是不確定的。我已經能夠直接在我的視圖代碼中使用它。我不能在輔助模塊中使用這樣的方法嗎?我需要包括什麼嗎?

感謝您的幫助!

回答

1

在行html << radio_buttons(model_name, target_property, x[1])該方法遞歸調用自身。這一次第三個參數不再是散列,但是這是一個Fixnum,它是x[1]。由於Finxums不響應sort,您會收到錯誤消息。

0

undefined method 'sort' for 97:Fixnum意味着97,一個Fixnum的實例,沒有sort方法。出於某種原因,方法中的參數button_source以整數形式出現。

速戰速決是寫list = Array(button_source).sort這將迫使button_sourceArray,因爲Array s爲具有sort方法最常見的類。如果button_source已經是Array,則不會有任何更改。

+0

這讓我過去了排序錯誤,所以謝謝!但是,現在我得到了「堆棧太深」的錯誤。我的遞歸似乎是有問題的。 – Magicked 2010-04-12 16:26:34