【问题标题】:How to properly hook into after_create in Rails model如何在 Rails 模型中正确挂钩 after_create
【发布时间】:2012-07-14 10:34:39
【问题描述】:

我目前有这样的事情:

class Article

  # fields = [flag, something]

  after_create :update_flag

  def update_flag
    self.flag = 1 if something_changed?
  end
end

但是当我更改某字段时,它不会更改“标志”字段。我已经保存了对象。仍然没有变化。

a = Article.create(flag: 0, something: "content")
a.something = "different"
a.save

a.flag
> 0

有什么想法吗?

【问题讨论】:

  • 6 年!哈哈,回顾你完全缺乏理解,这很有趣:D

标签: ruby-on-rails-3


【解决方案1】:

改变

after_create

after_update

在您的代码示例中,您正在更新对象,这就是您需要不同挂钩的原因。请参阅docs 了解更多信息。

【讨论】:

  • 非常感谢,成功了。我很困惑,因为我认为在初始化对象时会运行 after_create 钩子。我知道我需要学习我的钩子。再次感谢。
【解决方案2】:
after_create()

在 Base.save 之后调用尚未保存的新对象(不存在记录)。

after_save()

在 Base.save 之后调用(不管是创建还是更新保存)。`

【讨论】:

    【解决方案3】:

    将“after_create”更改为“after_save”,因为 after_create 只工作一次 - 就在首次创建记录之后,并且每次保存对象时 after_save 工作 - 即使您只是在多年后更新它。

    参考-What is the difference between `after_create` and `after_save` and when to use which?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多