0

当我访问我的一个控制器的“新”操作时,我收到了可怕的错误:“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 时要考虑到用户关系。我是否正确假设这是问题所在?如果是这样,我该如何解决上述循环?

4

1 回答 1

0

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

def new
  @work = current_user.works.new
end

更新:

看起来您的方法定义在控制器中被搞砸了。create, new, 并且destroy实际上是在您的index方法中定义的。您需要将位于endshow方法正上方的那个移动到该方法的正上方create

于 2013-02-27T04:11:14.340 回答