findとfind_by
検索で複数件がヒットする場合、find では複数結果を配列で返すが、find_by_ は1件のみ返す検索で1件もヒットしなかった場合、find は RecordNotFound となるが、find_by_ は nil を返す
参考 find と find_by_ の使い分け
newとbuildの違い
例えば、以下のようなアソシエーションが定義された2つのモデルがあったとする。newは対象のモデルのインスタンスを生成するおなじみのメソッドである。
一方のbuildはActiveRecordアソシエーションを扱う類のメソッドである。 newメソッドのようにインスタンスの生成を行えるが、親モデルに対する外部参照キーを自動でセットしてくれるところがnewメソッドと異なる。
has_manyではなくhas_oneでアソシエーションが定義されている場合は、以下のような構文で"build"できる。
参考 ActiveRecord の new と build の違い
newとcreateの違い
newはオブジェクトを生成する飲み。DBには変化がない。createはオブジェクトを生成して、保存。INSERTまで行う。
create!とcreate、save!とsaveの違い
基本的には、それぞれ動作は一緒だが、失敗したときの動作が異なる。- create!・・・例外が発生する
- create・・・生成されたオブジェクトが返る
- save!・・・例外が発生する
- save・・・falseが返る
逆にビックリマークがないときは、失敗するかもしれない。だからその場合は別途対応しようという使い分けをする
参考 「!」の有無による違い
updateとupdate_attributesの違い
- update_attribute、update_attributesやsave・・・1つのレコードを更新する際に使う
- update、update_all ・・・複数のレコードを更新する際に使う
saveとupdateの違い
- save・・・変更を加えたものを最後にsave(save!)を使い、DBに保存する
- update_attribute(s)・・・いちいちsaveする必要はなく、Hoge.update_attributes(hoge: hoge, foo: foo)とまとめてupdateできる