Ruby on rails 创建子记录:未定义的方法“model#u name';班级:班级
当我访问一个控制器的“new”操作时,我得到了一个可怕的错误:“NilClass:Class的未定义方法`model_name'。当我访问/works/new时出错。一个用户有很多作品。以下是工程控制员:Ruby on rails 创建子记录:未定义的方法“model#u name';班级:班级,ruby-on-rails,class,methods,ruby-on-rails-3.2,Ruby On Rails,Class,Methods,Ruby On Rails 3.2,当我访问一个控制器的“new”操作时,我得到了一个可怕的错误:“NilClass:Class的未定义方法`model_name'。当我访问/works/new时出错。一个用户有很多作品。以下是工程控制员: class WorksController < ApplicationController def index @works = Work.all respond_to do |format| format.html # index.html.erb format
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
class WorksController@works}
结束
def创建
@work=当前用户.works.build(参数[:works])
如果@work.save
将\u重定向到根\u url
其他的
渲染“home”
结束
结束
def新
@工作=工作
结束
def销毁
@工作,毁灭
将\u重定向到根\u url
结束
结束
def秀
@work=work.find(参数[:id])
@user=user.find(参数[:id])
回应待办事项|格式|
format.html#show.html.erb
format.xml{render:xml=>@work}
结束
结束
结束
在new.html.erb视图文件中,我使用以下循环创建表单,以便提交填写的字段将为用户创建新的工作记录:
<%= form_for(@work) do |f| %>
我觉得这是错误的根源,因为我没有告诉Rails在创建新作品时考虑到用户关系。我认为这就是问题所在,对吗?如果是这样,我如何修复上述循环?我建议更改新方法,使其将工作对象的范围限定为当前用户。但我不确定这是你的问题
def new
@work = current_user.works.new
end
更新:
看起来您的方法定义在控制器中出错了<代码>创建、
新建
和销毁
实际上是在您的索引
方法中定义的。您需要将show
方法正上方的end
移动到create
方法正上方。您说您正在使用“以下循环”,但我没有看到循环。你是忘了粘贴一些代码,还是只是指“块”?很抱歉,你是对的。我本来想打“block”的!谢谢你的回复!这是一个好主意,但不幸的是我仍然得到了错误。不过,我确信这样做可以避免将来的bug!stacktrace是否显示该行是导致问题的行?stacktrace显示视图中的这行是导致错误的行:刚刚发布了对我的问题的更新,看起来像是语法问题。