我有一个可以在同一个更新请求中更新两次的模型。
下面是我的过滤器:
after_update :make_api_call
在我的函数中,我更新了api,然后将响应保存在同一个对象上。
def make_api_call
response = SomeAPI.call
self.api_response = response
self.save
end
这显然会导致update函数在无限循环中调用。如果唯一更新的属性是api_response
属性,我希望跳过make_api_call
函数。在update之前执行API调用不是与记录相关联的一些嵌套资源的选项。
发布于 2018-07-25 05:06:22
你可以使用跳过回调的ActiveRecord::Persistence#update_columns。
def make_api_call
response = SomeAPI.call
update_columns(api_response: response)
end
发布于 2018-07-25 05:42:45
从Rails 5.1开始,您还可以这样做:
after_update :make_api_call, unless: :saved_change_to_response?
saved_change_to_response?
方法来自ActiveRecord::AttributeMethods::Dirty
,它允许我们通过在属性名称前添加saved_change_to_
来检查特定属性是否发生了更改。
https://stackoverflow.com/questions/51507320
复制相似问题