我们怎样才能在ActiveRecord中使用"ON DUPLICATE KEY UPDATE"构造?

Moh*_*rma 5 activerecord ruby-on-rails

找不到任何在模型级别添加此构造的正确方法.

主要目的是做"insert_or_update",但不希望从ActiveRecord层执行read => check exists => write或update.

有什么指针吗?

但是找到了一些相关的弃用代码.

http://apidock.com/rails/ActiveRecord/Base/create_or_update http://apidock.com/rails/ActiveRecord/Base/update_attributes

bou*_*der -2

您在first_or_initialize之后,您可以将其与where结合使用,如下所示:

instance = Model.where(:attr1 => 'value1').first_or_initialize(:attr2 => 'value2')
# do something with instance
instance.save
Run Code Online (Sandbox Code Playgroud)

如果在保存之前不需要对实例进行操作,也可以使用first_or_create

  • 这与“ON DUPLICATE KEY UPDATE”不同,因为它不提供相同的原子保证 (28认同)