【結論】
・new/buildはともに
モデルオブジェクトを生成するメソッド
・現行バージョン(Rails4系・5系)では
機能的な違いは無い。
・但し、以前までの慣例として、
モデルを関連付けしている場合は
buildを利用する場合がある
【目次】
【本題】
同じ機能を持つ二つのメソッド
Railsには、モデルオブジェクトを生成するメソッドが
newとbuildの2種類存在します。
どちらも同じ機能なのに、なぜ二つ存在するのでしょうか?
今回は、それをまとめます。
buildは関連付けされたモデル用だった
かなり古いバージョンのRailsでは、
buildは関連付けされたモデル用のメソッドで、
newはどこにも関連付けされていないモデル用のメソッドでした。
buildで生成されたモデルオブジェクトには、
関連付けされたモデルの外部キーが自動でセットされます。
つまり、Userモデルと関連付けさせている場合は、
「user_id」がセットされます。
具体例を出すと、下記二つのコードは、 両方とも「user_id」がセットされた状態になります。
@campaign = Campaign.new(user_id: current_user.id) @campaign = current_user.campaigns.build
buildはnewのエイリアス
但し、現行バージョン(4系・5系)では、
newでも外部キーがセットされる様になり、
buildはnewのエイリアスという位置付けになっています。
エイリアスとは、ショートカットの様なもので、
つまり、newとbuildは全く同じ機能になったというわけです。
慣例としての使い分け
以上の通り、機能面では全く同じですが、
可読性などの観点から、これまでの慣例として
関連付けされたモデルのオブジェクトを生成する際には、buildを使い、
それ以外でnewを用いるという使い分けがなされています。
(うちの職場もそうです)
《今日の学習進捗(3年以内に10000時間に向けて)》
学習開始からの期間 :111日
今日までの合計時間:1042h
一日あたりの平均学習時間:9.4h
今日までに到達すべき目標時間:1014h
目標との解離:28h
「10,000時間」まで、
残り・・・「8958時間!」