Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails表单提交导致错误_Ruby On Rails_Forms_Sqlite_Activerecord - Fatal编程技术网

Ruby on rails Rails表单提交导致错误

Ruby on rails Rails表单提交导致错误,ruby-on-rails,forms,sqlite,activerecord,Ruby On Rails,Forms,Sqlite,Activerecord,我创建了这个表单: <%= form_for @task do |task| %> <%= task.hidden_field :user_id, :value => @user.id %> <%= task.label :task %> <%= task.text_area :task %> <%= task.label :deadline %> <%= task.text_fi

我创建了这个表单:

<%= form_for @task do |task| %>
    <%= task.hidden_field :user_id, :value => @user.id %>

    <%= task.label :task %>
    <%= task.text_area :task %>

    <%= task.label :deadline %>
    <%= task.text_field :deadline %>

    <%= task.submit "Add" %>
<% end %>
当我提交表单时,我收到以下错误:

SQLite3::ConstraintException:todos.user_id不能为空:插入到“todos”(“已完成”、“已创建”、“截止日期”、“任务”、“已更新的时间”、“用户id”)值(?,,,,,,,?)

有什么问题

编辑:

这是路轨经过的材料:

 {"utf8"=>"✓",
 "authenticity_token"=>"oJr4ii4szyBVAacBJDNYcZn8QWGrFij4dF1wqD1Fvic=",
 "todo"=>{"user_id"=>"1",
 "task"=>"Hello World",
 "deadline"=>"03/20/2013"},
 "commit"=>"Add"}
这就是模型:

attr_accessible :user_id, :deadline, :task, :completed

谢谢

正如数据库通知您的那样,问题是您的
Todo
user\u id
字段不能为零。在保存之前,请确保将其与当前用户关联,可能在控制器中执行以下操作:

def new
    @task = Todo.new
  end

  def create
    @task = Todo.new(params[:task])
    if @task.save
        set_flash "Task added"
      redirect_to action: 'index'
    else
        set_flash "Task adding failed, Please try again"
      redirect_to action: 'index'
    end
  end

def set_user
    @user = current_user
end
def create
  @task = Todo.new(params[:task])
  @task.user = current_user
  ...

end

或者,如果希望在没有关联用户的情况下创建TODO,请从数据库中删除约束。

请求参数中的
用户id
不是零,而在firebug中的
隐藏字段
不是零。将parmaters添加到主要问题中可能无法在您的模型中访问,然后(检查您的
attr\u accessible
并确保
user\u id
存在)。但无论如何,您都不想基于
隐藏字段的值分配用户:这会让您暴露给用户,用户只需操纵表单中发送的数据,就有可能将TODO分配给其他用户。我在
attr\u accessible
中有
user\u id
,但我通过控制器分配了
user\u id
现在,它抛出相同的错误,但它现在要求的不是
用户id
值,而是
任务
值。编辑:通过控制器分配所有值,允许表单成功提交。实际发生这种情况是因为您正在使用
参数[:task]
在您的控制器中,但参数是在
todo
哈希下发送的。如果您将控制器更改为
params[:todo]
这将按您的预期工作。谢谢,它现在可以工作了。如果可以,请解释为什么它以
todo
而不是
任务的形式通过哈希?