Вспомогательный модуль Rails неопределенный метод `sort ' - PullRequest
0 голосов
/ 12 апреля 2010

Я пытаюсь создать простой вспомогательный модуль в рельсах, и я озадачен следующим сообщением об ошибке из моей новой формы лица (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 ]

1 голос
/ 12 апреля 2010

В строке html << radio_buttons(model_name, target_property, x[1]) метод вызывает себя рекурсивно. На этот раз третий аргумент уже не хеш, а x[1], который является Fixnum. А поскольку Finxums не отвечает на sort, вы получаете ошибку.

0 голосов
/ 12 апреля 2010

undefined method 'sort' for 97:Fixnum означает, что 97, экземпляр Fixnum, не имеет метода sort. По какой-то причине параметр button_source в вашем методе является целым числом.

Быстрым решением было бы написать list = Array(button_source).sort, что приведет button_source к Array, потому что Array s - самый распространенный класс, имеющий метод sort. Если button_source уже является Array, ничего не изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...