【问题标题】:.present? on an ActiveRecord object triggering after_save callback。当下?在触发 after_save 回调的 ActiveRecord 对象上
【发布时间】:2020-02-24 10:29:26
【问题描述】:

我目前正在做一个 Rails 项目,我有两个模型,FooBar。他们的关系是Foo属于Bar

预期行为

每当我尝试调用 .present? 时,它都会告诉我特定对象是否存在? 对于我给定的场景,Foo.first。 bar.present? 只会告诉我 foo 的 bar strong text 是否存在。

实际行为

调用 Foo.first.bar.present? 正在触发 bar 对象上的 .save,这对我来说很困难,因为有一些保存特定条形对象后可能需要时间更新大量数据的回调。截图链接如下

https://share.getcloudapp.com/d5u0bykB

系统配置

Rails 版本: Rails 5.0.7.2

Ruby 版本: ruby 2.4.4p296(2018-03-28 修订版 63013)[x86_64-darwin18]

【问题讨论】:

  • 您好,能否分享一下 Foo 和 Bar 之间的关联是如何定义的?
  • @AmitBadheka 请参考下面的截图share.getcloudapp.com/yAuv4JDd
  • 您确定是调用了 after_save 回调而不是 after_find 或 after_initialize 回调吗?
  • @Fernand 是的,我确定。
  • 在问题上粘贴代码,而不是图片(阅读堆栈溢出指南),同时显示相关代码,而不仅仅是关联(例如也显示回调)

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

您可以在present?blank? 的源代码中看到这些方法永远不会保存记录。所以你的问题的原因必须在你的代码中的其他地方。

【讨论】:

  • 过去几年我一直在使用 rails,是的,我知道他们永远不会保存记录,但在我的情况下,他们正在触发,我并没有覆盖这些默认的 rails 方法,那就是为什么这对我来说很奇怪。
  • 对不起。我不是故意冒犯你的。但我看不出present? 将如何保存对象。也许是猴子修补 Object 类的 Gem?也许这是您的代码中的一些奇怪的交互?
  • 是的,你也许是对的,但我不知道如何追溯到那个猴子补丁,因为这个项目并不小。希望我能找到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多