如何在Rails中创建/更新ActiveRecord时跳过所有回调

时间:2019-05-25 18:57:31

标签: ruby-on-rails ruby validation activerecord callback

我需要一种简单的方法来在更新活动记录时跳过验证和回调。

我正在运行以下代码:

Student.find_or_create_by(id: data['id']).update(data)

其中data是具有与学生列相同键的哈希值。 它按预期工作。但我想避免在更新时进行所有回调和验证。如某些堆栈溢出答案中所述,我尝试过:

Student.find_or_create_by(id: data['id']).send(:update_without_callbacks, data)

未定义的方法update_without_callbacks说,它不起作用。

Rails中是否没有像update_by_skipping_callbacksupdate(skip_callbacks: true, data)这样的简单方法?

2 个答案:

答案 0 :(得分:1)

https://guides.rubyonrails.org/active_record_callbacks.html#skipping-callbacks

您可以尝试update_columns方法

https://apidock.com/rails/ActiveRecord/Persistence/update_columns

请记住,这直接进入数据库,因此updated_at列不会更新,除非您明确地对其进行更新

答案 1 :(得分:0)

尝试

Student.find_or_create_by(id: data['id']).assign_attributes(data).save(validate: false)