Я разрабатываю веб-приложение для управления задачами, используя ruby on rails. У меня есть две модели: user
и task
. Модели выглядят так:Ассоциации в Rails 4
class User < ActiveRecord::Base
has_many :tasks
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
def role?(role_name)
role == role_name
end
def self.assigned_user(task_params)
User.where("name = ?", task_params["assigned_to"])
end
end
class Task < ActiveRecord::Base
belongs_to :user
end
Что мне нужно - назначить задачу пользователю при создании задачи. Но я не знаю, как это сделать в create
действии tasks_controller
. Моя создать действие выглядит так
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
@user = User.assigned_user(task_params)
@user.tasks << Task.last
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
Всякий раз, когда администратор назначает задачу, когда ее создатель, это дает ошибку говоря undefined method tasks for #<User::ActiveRecord_Relation:0x007fe7b1c60610>
. Кто-нибудь может помочь, что может быть проблемой?
Что это? '@user = User.assigned_user (task_params)' Также в следующей строке используйте это: '@user.tasks << @ task', otherwhise будет делать запрос в базе данных без необходимости. – developer033
assign_user - это метод в модели пользователя, который возвращает пользователя, извлеченного из базы данных. –