ActiveRecordにはupsert機能が組み込まれていますか?私はそれを自分で書くことができると知っていますが、もしそのようなことが既に存在するなら、私は明らかにしたくありません。Upsert in Rails ActiveRecord
19
A
答えて
13
Model.find_or_initialize
あなたがしたいことはありそうです。それが理にかなっている場合はsave
またはupdate_attributes
でチェーンすることができます。
詳細情報はRails Guidesです。私はちょうどこのライブラリに出会っ
3
もありModel.find_or_createさ: https://github.com/seamusabshere/upsert
私はまだそれをテストしていませんが、それは有望に見える 私は上のブログの記事を書いていた+6
これはアップアップを行いません。これは、選択した後に(オプションで)挿入を行います。シングルスレッドの世界では同じ効果が得られますが、マルチスレッドの世界では実際のアップサルトを行う必要があります。 – tybro0103
11
-1
0
IMO Upsertメカニズムでは、モデルごとにカスタム構成が必要です。
したがって、モデルのカスタムSQLクエリを実装するのが最善の解決策です。
insert into <table> (<field_1>, ..., <field_n>)
values (<field_1_value>, ..., <field_n_value>)
on duplicate key update
field_x = field_x_value,
...
field_z = field_z_value;
関連する問題
- 1. rails ActiveRecord :: Observer in plugin
- 2. UPSERT in SSIS
- 3. Upsert in redshift
- 4. Ruby on Rails ActiveRecord :: StatementInvalid in Customers#show
- 5. ActiveRecord :: StatementInvalid in Users#show Railsチュートリアル第12章
- 6. belongs_to関連とActiveRecord :: InvalidForeignKey in Rails 5
- 7. ActiveRecord in Railsテストを更新する
- 8. Ruby Activerecord IN句
- 9. アクセスレールActiveRecord db in production mode
- 10. のActiveRecord: "IN" SQL文
- 11. ActiveRecord :: RecordNotFound in AlbumsController#show
- 12. フォロワーモデルin Rails
- 13. Rails ActiveRecord update_attributes!
- 14. Rails 3 ActiveRecord Localization
- 15. Rails、ActiveRecord、SubQueries
- 16. RailsのActiveRecordの:
- 17. Rails ActiveRecordアソシエーション
- 18. Rails - ActiveRecord Issue
- 19. many_to_mails in rails
- 20. ActiveRecord :: ConnectionNotEstablished Ruby on Rails
- 21. RailsのActiveRecordの句
- 22. ActiveRecord :: HasManyThroughAssociationNotFoundError - Ruby on Rails
- 23. 多形has_many:through in rails
- 24. has_many:through with has_and_belongs_to_many in Rails
- 25. acts_as_list with has_many:through in rails
- 26. in in Railsの
- 27. のActiveRecordはRailsの
- 28. SQL UNION with Rails ActiveRecord
- 29. Rails ActiveRecordの関係
- 30. Rails/ActiveRecord with mysql BIT
パスタの回答を参照してください – tybro0103
これを見た人は誰ですか?レールガイドは、新しいオブジェクトがDBにまだ格納されていないことを示しているので、これが真のDBアップセートであるかどうかわかりません。すなわち、マルチスレッド環境では、確実に動作しません。 – stuckj
このソリューションには並行性の問題があります。 'find_or_initialize'と' save'の間で別のスレッドがテーブルを更新すると失敗します。 –