Ошибка Rails при сбое validate_presence_of - PullRequest
0 голосов
/ 24 марта 2011
NoMethodError in Points#create

Showing /Volumes/EXTERNAL/Proiecte/Roadie/app/views/points/_form.html.erb where line #20 raised:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.collect
Extracted source (around line #20):

17:   </div>
18:   <div class="field">
19:     <%= f.label :section %><br />
20:     <%= f.select(:section_id, [["Select a Section name", 0]] + @sections.collect {|p| [ p.name, p.id ] }) %>
21:   </div>
22: 
23:   <div class="field">

По сути, что здесь происходит, когда одно из других полей на этой странице формы (что проверено моделью) отсутствует, рельсы извергают ошибку, опубликованную выше.

Раздел имеет много точек, и при создании новой точки пользователь должен иметь возможность выбрать родительский раздел.

Может ли кто-нибудь объяснить, почему это происходит?

1 Ответ

3 голосов
/ 24 марта 2011

Это происходит потому, что переменная экземпляра @sections равна nil.Вот что, я предполагаю, происходит на основе вашего поста:

Вы отправляете форму с неполными данными, какие посты создавать.Модель не сохраняется, поэтому вы заново визуализируете «новое» действие.Однако вы забыли повторно инициализировать переменные в действии 'new' вашего контроллера.

В Rails, когда вы вызываете render (: action => 'new'), он не выполняет кодв «новом» методе вашего контроллера.Он просто отображает «новый» шаблон, поэтому вам все равно нужно настроить любые переменные экземпляра.

...