我创建了这个表单:
<%= 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
由于
答案 0 :(得分:2)
正如数据库通知您的那样,问题是user_id
的{{1}}字段不能为零。确保在保存之前将其与当前用户关联,可能在控制器中执行类似操作:
Todo
如果您希望todos在没有关联用户的情况下可以创建,则从数据库中删除约束。