ActiveRecordには組み込みのアップサート機能がありますか?私はそれを自分で書くことができることを知っていますが、そのようなものがすでに存在する場合は明らかにしたくありません。
Model.find_or_initialize
はおそらくあなたが望むことをします。意味がある場合は、save
またはupdate_attributes
でチェーンできます。
詳細については、 Rails Guides をご覧ください。
私はちょうどこのライブラリに出くわしました: https://github.com/seamusabshere/upsert
まだテストしていませんが、有望に見えます
Rails 6:upsert
とupsert_all
をActiveRecord
に追加した素晴らしい新機能があります
詳細については、こちらをご覧ください https://edgeapi.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-upsert_all
Model.find_or_createもあります
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;