我有一个可以在同一更新请求中更新两次的模型。
这是我的过滤器:
after_update :make_api_call
在我的函数中,我更新了api,然后将响应保存在同一对象上。
def make_api_call
response = SomeAPI.call
self.api_response = response
self.save
end
显然,这将导致无限循环调用更新功能。如果要更新的唯一属性是make_api_call
属性,我希望跳过api_response
函数。在更新之前执行API调用不是对与记录关联的某些嵌套资源的选择。
答案 0 :(得分:1)
从Rails 5.1开始,您还可以:
after_update :make_api_call, unless: :saved_change_to_response?
saved_change_to_response?
方法来自ActiveRecord::AttributeMethods::Dirty
,该方法允许我们通过在属性名称前加上saved_change_to_
来检查特定属性是否已更改。
答案 1 :(得分:0)
您可以使用ActiveRecord::Persistence#update_columns跳过回调。
def make_api_call
response = SomeAPI.call
update_columns(api_response: response)
end