创建语句在rails中不起作用

时间:2012-09-10 17:32:46

标签: ruby-on-rails ruby oncreate

所以我有一个项目与类别的关系,这样一个项目可以有很多类别,一个类别属于一个项目。我已经设法让它工作,但现在 - 当我重新启动我的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"}

这是在击中创建时抛出的。任何想法或我需要显示更多代码吗?

1 个答案:

答案 0 :(得分:2)

您似乎没有current_user,因此设置为nil

.id上调用nil将导致Rails中出现此错误。

如果您的应用程序不允许匿名访问,那么您就遇到了问题。 如果是,你应该这样做:

current_user ||= User.new

始终将current_user初始化为新的用户实例。 您的代码仍然无效,因为User.new将创建一个未保存的实例。