Ruby on Rails - неопределенный метод 'map' для nil: NilClass

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

Вот что у меня есть:

Курс Контролер

class CoursesController < ApplicationController
 def create
 @semesters = Semester.all()
 @course = Course.new(params[:course])
 # Save the object
 if @course.save
 flash[:notice] = "Course created."
 redirect_to(:action => 'list')
 else
 # If save fails, redisplay the form so user can fix problems
 render('new')
 end
 end
end

Посмотреть

#views/courses/new.html.erb
<%= form_for(:course, :url => {:action => 'create'}) do |f| %>
 <%= f.select(:semester, @semesters.map { |s| [ s.name, s.id ] }) %>
 <%= submit_tag("Create Course") %>
<% end %>

Я надеялся, что это выйдет:

<select>
 <option id="1">Spring 2013</option>
 <option id="2">Fall 2013</option>
 </select>

Но вместо этого я получаю сообщение об ошибке:

views/courses/new.html.erb where line #32 raised:

 undefined method 'map' for nil:NilClass

Строка # 32 соответствует моему помощнику формы.

Любая помощь в этом была бы замечательной!

1 ответ

Вы должны установить переменную @semesters в контроллере:

def new
 @semesters = Semester.all
end

Ошибка возникает из-за того, что переменная unset instance вычисляется на nil, поэтому вы пытаетесь вызвать метод map для объекта nil.

licensed under cc by-sa 3.0 with attribution.