所以我有一个项目与类别的关系,这样一个项目可以有很多类别,一个类别属于一个项目。我已经设法让它工作,但现在 - 当我重新启动我的rails服务器时,它不起作用。下面我展示的代码是我重新启动之前和重新启动rails服务器之后的代码,所以我认为它与代码有关...
所以我不确定你是否需要模型或只需要控制器或表格或什么,所以我已经从类别控制器发布了创建问题的那个方法:
def create
@project = Project.find(params[:project_id])
@category = @project.categories.create(params[:category].merge(:user_id => current_user.id))
if @category.save
redirect_to project_tasks_path(@project.id), :flash => {:success => 'Created a Category! Now you can create tasks!'}
else
redirect_to :back, :flash => {:error => 'We could not create an category. You need to enter a name.'}
end
end
它发生在精神创造线上,抛出错误:
RuntimeError in CategoriesController#create
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Rails.root: /home/adam/Documents/Aptana Studio 3 Workspace/StartPoint
Application Trace | Framework Trace | Full Trace
app/controllers/categories_controller.rb:14:in `create'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"qbJyilRiMtwOyPDq9HQFO4JME+TPkh/cCEEqPZPxGDw=",
"category"=>{"category"=>"ffffffff"},
"commit"=>"Create Category",
"project_id"=>"2"}
这是在击中创建时抛出的。任何想法或我需要显示更多代码吗?
答案 0 :(得分:2)
您似乎没有current_user
,因此设置为nil
。
在.id
上调用nil
将导致Rails中出现此错误。
如果您的应用程序不允许匿名访问,那么您就遇到了问题。 如果是,你应该这样做:
current_user ||= User.new
始终将current_user
初始化为新的用户实例。
您的代码仍然无效,因为User.new将创建一个未保存的实例。