Rails的提交表单导致错误
问题描述:
我创造了这个形式:Rails的提交表单导致错误
<%= 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 may not be NULL: INSERT INTO "todos" ("completed", "created_at", "deadline", "task", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?)
是什么问题?
编辑:
这是由轨道通过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
感谢
答
由于数据库已通知你,问题在于user_id
您的Todo
的字段不能为零。确保你保存它,也许做这样的事情在你的控制器之前,与当前用户相关联的是:
def create
@task = Todo.new(params[:task])
@task.user = current_user
...
end
或者,如果你想待办事项是可创建从数据库中删除约束,而不具有相关用户。
'user_id'不是零请求参数和萤火虫'hidden_filed'不是nil.added parmaters主要问题 – Wahtever 2013-03-21 18:34:38
它可能无法在您的模型中访问,然后(检查您的'attr_accessible '并确保'user_id'在那里)。但是,您不希望根据“hidden_field”的值来指定用户:这会将用户暴露给潜在用户,这些用户可能通过简单地操纵他们在表单中发送的数据向其他用户分配待办事项。 – Veraticus 2013-03-21 18:37:12
我在'attr_accessible'中有'user_id',我通过控制器分配了'user_id',但是现在它会抛出相同的错误,而不是'user_id'值,它现在要求'task'值。 **编辑**:通过控制器分配所有值允许表单成功提交 – Wahtever 2013-03-21 18:45:20