ActiveRecordのnewとbuild
ActiveRecordでモデル間の関連を定義している場合でインスタンス化する時にnewでなくてbuildを使うとコードがすっきりする。
これはパーフェクトRuby on Railsを読んでいて「へー」って思ったのでメモ。
例えばUserとMovieで1対多の関係がある場合は以下のように書ける
@user = User.new(name: 'hoge', age: 30) @user.save movie = @user.movies.build(title: movie_params[:title], description: movie_params[:description], rate: movie_params[:rate])
このようにbuildを使うと既に@userと関連されて状態でインスタンス化されます。
今度は1対1の場合はどうなのかというと
photo = movie.build_photo(title: photo_params[:title], url: photo_params[:url])
build_[モデルクラス名]といメソッドを使えば同じ事ができます。
恥ずかしながら、この辺りのメソッドをちゃんと分かってなかった。色々便利なメソッドあるなー。
これでコードの行数も減らすこともできました。