読者になるコード日進月歩しんくうの技術的な小話、メモ、つれづれ、など2020-10-31Railsのfind***by系のメソッドを軽くまとめるRails以下のツイートが気になったの調べた。違い実装を見てもらってもわかりやすい話だが、実際にcreateまで実行してしまうか、オブジェクト生成のみ留めるかの違い。ついてこのメソッドに関しては実態のソースに以下のようなコメントがある1つまたは複数の列に一意の制約を持つテーブル内に、指定された属性を持つレコードを作成しようとします。ような一意の制約がある場合、そのような挿入が通常発生するであろう例外が捕捉され、それらの属性を持つ既存のレコードがfind_byを使用して発見されます。これはfind_or_create_byに似ていますが、SELECTとINSERTの間の古い読み込みの問題を回避します。create_or_find_byにはいくつかの欠点があります。基底となるテーブルは、一意の制約で関連する列を定義していなければなりません。一意な制約違反は、与えられた属性のうち1つだけ、または少なくともすべての属性よりも少ない属性によってトリガされる可能性があります。SELECTの間に別の競合状態があり、これら2つのステートメントの間のDELETEが別のクライアントによって実行された場合にトリガーされます。ほとんどのアプリケーションでは、これはヒットする可能性がかなり低い条件です。このメソッドは、制御フローを処理するために例外処理に依存しており、多少遅くなるかもしれません。SELECTの競合条件がトリガされない限り)、レコードを返しますが、作成が試みられ、検証エラーのために失敗した場合、それは永続化されません、あなたはそのような状況でcreateが返すものを取得します。https://github.com/rails/rails/blob/bca6f7f57693dc4244870f7bd7f37a4f5cbf1976/activerecord/lib/active_record/relation.rb#L178というように、既存レコードが存在することが設定された値からユニーク成約で発覚するケースにおいては利用することができる。系の処理あ、これi18nなのねという感じ。「入門『状態』」という内容で登壇してきました。(3)はてなブログをはじめよう!shinkufencerさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。