Rails表单提交导致错误

时间:2013-03-21 18:07:01

标签: 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_field :deadline %>

    <%= task.submit "Add" %>
<% end %>

和控制器:

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

当我提交表单时,我收到此错误:

  

SQLite3 :: ConstraintException:todos.user_id可能不是NULL:INSERT INTO“todos”(“completed”,“created_at”,“deadline”,“task”,“updated_at”,“user_id”)VALUES(?, ?,?,?,?,?)

有什么问题?

修改

这是由rails传递的parmaters:

 {"utf8"=>"✓",
 "authenticity_token"=>"oJr4ii4szyBVAacBJDNYcZn8QWGrFij4dF1wqD1Fvic=",
 "todo"=>{"user_id"=>"1",
 "task"=>"Hello World",
 "deadline"=>"03/20/2013"},
 "commit"=>"Add"}

这是模型:

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

由于

1 个答案:

答案 0 :(得分:2)

正如数据库通知您的那样,问题是user_id的{​​{1}}字段不能为零。确保在保存之前将其与当前用户关联,可能在控制器中执行类似操作:

Todo

如果您希望todos在没有关联用户的情况下可以创建,则从数据库中删除约束。