web-dev-qa-db-ja.com

Rails ActiveRecord

ActiveRecordには組み込みのアップサート機能がありますか?私はそれを自分で書くことができることを知っていますが、そのようなものがすでに存在する場合は明らかにしたくありません。

31
Jason Swett

Model.find_or_initializeはおそらくあなたが望むことをします。意味がある場合は、saveまたはupdate_attributesでチェーンできます。

詳細については、 Rails Guides をご覧ください。

15
Andy Lindeman

私はちょうどこのライブラリに出くわしました: https://github.com/seamusabshere/upsert

まだテストしていませんが、有望に見えます

14
jacklin

Rails 6:upsertupsert_allActiveRecordに追加した素晴らしい新機能があります

詳細については、こちらをご覧ください https://edgeapi.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-upsert_all

3
Chris

Model.find_or_createもあります

2
Pasta

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;
0
Serge Seletskyy