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. ActiveRecord :: StatementInvalid in Users#show Railsチュートリアル第12章
- 4. ActiveRecord in Railsテストを更新する
- 5. Ruby Activerecord IN句
- 6. アクセスレールActiveRecord db in production mode
- 7. のActiveRecord: "IN" SQL文
- 8. many_to_mails in rails
- 9. 多形has_many:through in rails
- 10. acts_as_list with has_many:through in rails
- 11. has_many:through with has_and_belongs_to_many in Rails
- 12. Rails ActiveRecord update_attributes!
- 13. Rails、ActiveRecord、SubQueries
- 14. Rails 3 ActiveRecord Localization
- 15. RailsのActiveRecordの:
- 16. Rails ActiveRecordアソシエーション
- 17. RailsのActiveRecordの句
- 18. Rails ActiveRecordの関係
- 19. Rails/ActiveRecord with mysql BIT
- 20. SQL UNION with Rails ActiveRecord
- 21. Rails 3リファクタリングActiveRecordクエリ
- 22. Rails 3.2 ActiveRecordデータベースフィールドの問題
- 23. Rails Beginners NoMethodError in PinsController#new
- 24. Rails in depthプラグインチュートリアル
- 25. attr_accessible in railsアクティブレコード
- 26. Helpers in Railsエンジン
- 27. Has_and_belongs_to_many in Rails 3
- 28. date_select in rails
- 29. form_remote_for in rails
- 30. Mollom in Rails 3
パスタの回答を参照してください – tybro0103
これを見た人は誰ですか?レールガイドは、新しいオブジェクトがDBにまだ格納されていないことを示しているので、これが真のDBアップセートであるかどうかわかりません。すなわち、マルチスレッド環境では、確実に動作しません。 – stuckj
このソリューションには並行性の問題があります。 'find_or_initialize'と' save'の間で別のスレッドがテーブルを更新すると失敗します。 –