0

このフォームを作成しました:

<%= 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 (?, ?, ? 、?、?、?)

何が問題ですか?

編集:

これは、レールによって渡されるパラメーターです。

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

これがモデルです:

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

ありがとう

4

1 に答える 1

2

データベースが通知したように、問題はuser_idフィールドTodoが nil にならないことです。保存する前に、現在のユーザーに関連付けていることを確認してください。おそらく、コントローラーで次のようなことを行います。

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

end

または、関連付けられたユーザーがなくても todo を作成できるようにする場合は、データベースから制約を削除します。

于 2013-03-21T18:12:20.383 に答える