ぼくらの研究

ぼくらのための研究をしていきます。

[Rails]saveメソッドはif文でも実行されるのでuser.saveとかは省略可

      2017/03/12

form_forとかでユーザー情報を保存する時の「あれ?saveメソッド使われてないけどいつ保存されたの?」っていういうやつね。

具体的には以下のようなコードが代表例です。

いや本当に誰も書いてないからけっこう悩みましたよ。

Ruby on Rails本にも書いてないし、Railsチュートリアルでも言及してないし質疑応答でも誰も突っ込まないし。

もう誰でも分かることなんだけど、ぼくがアホでどっか見逃してるだけかと思っちゃいましたよ。

でもね。いろいろ見ても説明されてるところがない。

いやUser.newで作ったユーザーオブジェクトにparamsからデータ引っ張ってきて@userに入れるまでは分かるよ。

でもその後なんで@user.saveとかしてないのにいきなりif文でif @user.save~とか聞いちゃってんの?@userに入れたやつ一体いつDB(Userモデルのテーブル)に保存したの?

ねえ?だってRailsドキュメントのモデルのとこ(http://railsdoc.com/model)見てもnewメソッドのところに

モデルオブジェクトを生成する。
保存はまだされていないため、saveメソッドなどを使って保存する。

って書いてあるよ。

ねえいつ保存したの?ねえいついつ?

 

……みたいな感じになってました。いやほんとモヤモヤでした。

で、いろんな記事漁りましたけど、モデルが保存される厳密なタイミングについて言及してるものは見つけられませんでした。

観念して自分でいろいろいじくって確認するしかないと思ってrails console立ち上げて、インスタンス変数にUser.newでUserモデルオブジェクトぶちこんで一人でごちゃごちゃして、やっと確信。

 

 

これ……if文実行したときに、自動でsaveメソッド実行されてますよね?

ネットでいろいろ調べても誰も書いてるの見当たらないからほんと不安だけど間違いなくそうだよね?

 

結論:saveメソッドはif文でも実行される。なのでuser.saveとかは省略可

 

以上、もし同じように悩んでいる人の参考になれば幸いです。

ちなみにこれについて話している人が誰もいなかったので参考資料なしに自分一人でいろいろと試してみた出した結論なので、おかしいところ見つけたら@bokuranotamenoまでご連絡をいただければ幸いです。