1 初めに
今回、Railsを使ってto doアプリを作っているので、同じようなアプリを作っている人の参考になればと思い記事を執筆します。
[仕様]ruby 3.3.4/Rails 7.0.8.5
2 今回の題目について
今回はbuiidメソッドを使って、コードの分量を減らしていきたいと思います。
下記はbuildメソッドを使う前のコードになります。
def create
@task = Task.new(task_params)
@task.user_id = current_user.id
このコードはCRUDの中のcreateメソッドでタスクを作成し、そのユーザーとタスクを紐づけるという意味のコードです。この書き方でも問題なく動作します。実際にbuildメソッドを使用した結果が以下になります。
@task = current_user.tasks.build(task_params)
なんと!二文かかっていたのが、一文で済んでしまいました。ちなみにコードの意味は先ほどの二文と同じです。要は、current_user.tasksでユーザーとタスクを紐づけbuildでインスタンスを生成しています。しかしながら、このメソッドを使うには注意が必要です。has_many の関連付けができていないとこのbuildメソッドの書き方は成立しません。今回は以下のように関連付けがなされていました。また、この内容はRailsガイドにも乗っているのでそちらも参照してみてください。以下にリンクを載せておきます。
Railsガイド:https://railsguides.jp/association_basics.html
class User < ApplicationRecord
has_many :tasks
このようにbuildメソッドを使う際には関連付けがどうなっているかを改めて確認したほうが良いです。
3 まとめ
buildメソッドを使わずに書くことは可能です。しかしながら、コードの可読性といった観点からしたら私自身、短くまとめられるコードがあるならそれに越したことはないなと思います。私自身まだまだ勉強の身でありますが、この記事がお役に立てたら幸いです。