Slide 19
Slide 19 text
複数モデルを触るのでサービスクラスにする
コード例
# タスクへのコメント追加サービス
# このコメントの生成ルールを必ず守らなければいけないとしたら、サービスにこのロジックを置くのは適切なのか?
class CreateTaskCommentService
def call(task:, content:, author:)
# タスクが完了してたらコメントは追加できない
if task.completed?
raise "This task is already completed"
end
# タスクの作者はコメントできない。変な仕様だけど例なので許してください
:bow:
if task.owner?(author)
raise "Task owner can’t add comment"
end
Comment.create!(body: content, task_id: task.id, author_id: author.id)
end
end