创建子记录:NilClass:Class的未定义方法`model_name'

时间:2013-02-27 03:54:25

标签: ruby-on-rails class methods ruby-on-rails-3.2

当我访问其中一个控制器的“新”操作时,我遇到了可怕的错误:“NilClass:Class的未定义方法`model_name'”。访问/ works / new时发生错误。用户has_many工作。这是Works控制器:

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在创建新的Work with User关系时。假设这是问题,我是否正确?如果是这样,我该如何修复上述循环?

1 个答案:

答案 0 :(得分:0)

我建议您更改新方法,以便将Work对象的范围限定为当前用户。我不确定这是你的问题......

def new
  @work = current_user.works.new
end

<强>更新

看起来你的方法定义被搞砸了。 createnewdestroy实际上是在index方法中定义的。您需要将end方法正上方的show移到create方法的正上方。