Вы не храните идентификатор создателя? Если вы это сделаете, все данные, которые вам нужны, находятся в модели. Таким образом, просто реализуйте частный метод экземпляра в модели задач. Что-то вроде следующего
# Task model
private
def notify_assignee
if new_record? || user_id_changed? && creator_id != user_id
TaskMailer.new_task(@task).deliver
end
end
Вызовите вышеуказанный метод after_save
# Task model
after_save :notify_assignee
Если вы не сохраняете creator_id в базе данных, создайте атрибут accesor с именем :creator_id
.
# Task model
attr_accessor :creator_id
В контроллере перед сохранением выполните
# Tasks controller
@task.creator_id = current_user.id
и вышеописанный метод все еще будет работать.
Направление вашего контроллера будет автоматически упрощено до
if @task.save
format.html { redirect_to(tasks_path, :notice => 'Task was successfully created.') }
format.xml { render :xml => @task, :status => :created, :location => @task }
else
format.html { render :action => "new" }
format.xml { render :xml => @task.errors, :status => :unprocessable_entity }
end
А также это был бы правильный путь, поскольку «бизнес-логика» (которая в вашем случае отправляет получателю электронное письмо, уведомляющее, что кто-то еще назначил ему задачу ) будет находиться в модель.