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.