Using device and can't create task my models user
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :tasks
end
task
class Task < ApplicationRecord
belongs_to :user
end
task controller
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render :show, status: :created, location: @task }
else
format.html { render :new }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
and when trying to create task have an error
1 error prohibited this task from being saved:
User must exist
my response
Started POST "/tasks" for 127.0.0.1 at 2017-12-27 14:20:59 +0200 Processing by TasksController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"b7EkQsJygYBW1xLIm1uFD8jluXy2LYeoYjAOjKcwWOMHLwtalXmkTrNJu0yhexucwY94COegDcuVrOWLRkf8dg==", "task"=>{"title"=>"", "description"=>"", "priority"=>"", "due(1i)"=>"2017", "due(2i)"=>"12", "due(3i)"=>"27", "done"=>"0"}, "commit"=>"Create Task"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]]
(0.0ms) begin transaction
(0.1ms) rollback transaction
what's wrong?
Change belongs_to :user
to belongs_to :user, optional: true
. Rails 5 has introduced default validation in associations. Refer this link for better understanding
在控制器中创建的方法中,需要添加@task.user_id = current_user.id
Be aware, that Task is not good name for model according to https://reservedwords.herokuapp.com/words/task?q[word_or_notes_cont]=task
In Rails there is not full list of reserved words because of the nature of the language and framework. But sometimes you can face strange behaviour, when you use conflicting keyword.
You have missing user_id
for creating task
Try to the following
On your code
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render :show, status: :created, location: @task }
else
format.html { render :new }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
Modified from your code, you can use that
def create
@task = Task.new(task_params)
@task.user = current_user
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render :show, status: :created, location: @task }
else
format.html { render :new }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
Hope to help
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.