いくつかの方法があります。first_or_create_by
、find_or_create_by
などの原則に関する作業:データベースへActiveRecordのfind_or_create *メソッドに根本的に欠陥がありますか?
- 話それを作る、我々はそれを見つけなかった場合、我々は
- が欲しいものを見つけることを試みるためには、自分自身は
- 明らかに、これらのメソッドの同時呼び出しは、彼らが望むものを見つけることができません両方のスレッドを持つことができデシベル
に保存して、ステップ3 1で予期せずに失敗します。
- は、事前にごDBに賢明な一意性制約を作成:よりよい解決策があるよう
は、ある
create_or_find
です。
- 保存したい場合は保存してください
- うまくいきましたら、保存してください。
- それが原因RecordNotUnique例外の動作しなかった場合、それはすでにそこだ、偉大な、一見(だから私はRailsの組み込みのものを使用したいどのような状況で、私自身ではない、それを
をロードより信頼性の高い)create_or_find
?
説明していることは、多くのデータベースでサポートされているアップサルトです。 – Anthony
@Anthony権利、実際に私たちが使いたい宝石、https://github.com/zdennis/activerecord-importは、それをサポートしています。しかし、私はなぜデフォルトのルビーのものがそのように設計されるのかはっきりしないのですか?より多くの場合失敗する傾向があるようです。 – z5h