首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果给定字段是唯一更新的属性,则跳过after_update - Ruby on Rails

如果给定字段是唯一更新的属性,则跳过after_update - Ruby on Rails
EN

Stack Overflow用户
提问于 2018-07-25 04:49:22
回答 2查看 150关注 0票数 0

我有一个可以在同一个更新请求中更新两次的模型。

下面是我的过滤器:

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调用不是与记录相关联的一些嵌套资源的选项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-25 05:06:22

你可以使用跳过回调的ActiveRecord::Persistence#update_columns

def make_api_call
  response = SomeAPI.call    
  update_columns(api_response: response)
end
票数 0
EN

Stack Overflow用户

发布于 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_来检查特定属性是否发生了更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51507320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档