2013-07-29 2 views
1

Я провел последние несколько часов, пытаясь понять, что я делаю неправильно, но я не могу прийти к решению. Проще говоря, я пытаюсь заполнить поле выбора данными из таблицы под названием «семестры». (Я видел множество вопросов относительно этого на SO, но я не могу заставить их работать с моим приложением).Ruby on Rails - неопределенный метод `map 'for nil: NilClass

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

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

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 соответствует моему выбору формы.

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

+0

В сообщении об ошибке говорится, что '@ semesters' является' nil'. –

+0

Можете ли вы опубликовать действие 'edit'' CoursesController'? – daniloisr

+1

Также опубликуйте новое действие. Я предполагаю, что вы не определяете @semesters в этом действии. –

ответ

6

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

def new 
    @semesters = Semester.all 
end 

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

+0

Вы правы. Я случайно установил его в действии 'create', а не' new'. Благодарю. – Dodinas

Смежные вопросы