当我访问其中一个控制器的“新”操作时,我遇到了可怕的错误:“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关系时。假设这是问题,我是否正确?如果是这样,我该如何修复上述循环?
答案 0 :(得分:0)
我建议您更改新方法,以便将Work对象的范围限定为当前用户。我不确定这是你的问题......
def new
@work = current_user.works.new
end
<强>更新强>
看起来你的方法定义被搞砸了。 create
,new
和destroy
实际上是在index
方法中定义的。您需要将end
方法正上方的show
移到create
方法的正上方。