2013-02-27 5 views
0

Я получаю ужасную ошибку:« undefined method `model_name» для NilClass: Class «когда я обращаюсь к« новому »действию для одного из моих контроллеров. Ошибка возникает при доступе/works/new. Пользователь has_many Works. Вот контроллер работы:Создание записей для детей: неопределенный метод `model_name 'для NilClass: Class

class WorksController < ApplicationController 

    def index 
    @works = Work.all 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @works } 
end 

def create 
@work = current_user.works.build(params[:works]) 
    if @work.save 
     redirect_to root_url 
    else 
     render 'home' 
    end 
    end 

def new 
    @work = Work.new 
end 

def destroy 
    @work.destroy 
    redirect_to root_url 
end 

end 
    def show 
    @work = Work.find(params[:id]) 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @work } 
    end 
    end 
end 

В new.html.erb файл представления Я использую следующий цикл, чтобы создать форму, так что представление заполненных полей будет создавать новую запись Работы для пользователя:

<%= form_for(@work) do |f| %> 

у меня есть ощущение, что это является источником ошибки, так как я не говорю Rails, чтобы создать новую Работу с отношением пользователей в виде. Правильно ли я полагаю, что это проблема? Если да, то как мне исправить вышеуказанный цикл?

+0

Вы говорите, что используете «следующий цикл», но я не вижу петлю. Вы забыли вставить код или вы просто означали «блокировать»? –

+0

Простите, вы правы. Я хотел набрать «block» вместо этого! – winston

ответ

0

Я бы порекомендовал изменить ваш новый метод, чтобы он привязывал объект «Работа» к текущему пользователю. Я не уверен, что это ваша проблема, хотя ...

def new 
    @work = current_user.works.new 
end 

Update:

Похоже, ваши определения методов вкручиваются в контроллере. create, new и destroy на самом деле определяются в рамках вашего метода index. Вам необходимо переместить end, который находится прямо над методом show, который находится прямо над методом create.

+0

Спасибо за ответ! Это хорошая идея, но, к сожалению, я все еще получаю ошибку. Однако я уверен, что это изменение спасло меня от будущих ошибок! – winston

+0

Является ли stacktrace показом этой строки как вызывающей проблемы? –

+0

Стектура показывает, что эта строка в представлении вызывает ошибку: <% = form_for (@work) do | f | %> – winston

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