2013-03-21 74 views
0

我創造了這個形式: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 

感謝

回答

2

由於數據庫已通知你,問題在於user_id您的Todo的字段不能爲零。確保你保存它,也許做這樣的事情在你的控制器之前,與當前用戶相關聯的是:

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

end 

或者,如果你想待辦事項是可創建從數據庫中刪除約束,而不具有相關用戶。

+0

'user_id'不是零請求參數和螢火蟲'hidden_​​filed'不是nil.added parmaters主要問題 – Wahtever 2013-03-21 18:34:38

+0

它可能無法在您的模型中訪問,然後(檢查您的'attr_accessible '並確保'user_id'在那裏)。但是,您不希望根據「hidden_​​field」的值來指定用戶:這會將用戶暴露給潛在用戶,這些用戶可能通過簡單地操縱他們在表單中發送的數據向其他用戶分配待辦事項。 – Veraticus 2013-03-21 18:37:12

+0

我在'attr_accessible'中有'user_id',我通過控制器分配了'user_id',但是現在它會拋出相同的錯誤,而不是'user_id'值,它現在要求'task'值。 **編輯**:通過控制器分配所有值允許表單成功提交 – Wahtever 2013-03-21 18:45:20