【问题标题】:Update attributes before_save callback not saving extra attributes更新属性 before_save 回调不保存额外的属性
【发布时间】:2013-10-31 13:16:49
【问题描述】:

如果许多其他属性不为 0,我正在使用 before_save 回调方法将属性设置为 true。当我更新我的模型但未设置额外属性时调用回调。我认为这可能是因为该属性没有传递给更新方法。我该如何解决这个问题?

控制器

@blog.update(blog_params)

型号

before_save do
  self.indicator = true unless attribute_1 == "0" && attribute_2 == "0"
end

【问题讨论】:

    标签: ruby-on-rails activerecord attributes callback


    【解决方案1】:

    您可以考虑改用before_validation。 Rails 将在调用before_save 之前调用before_validation 回调,因此如果您需要确保设置了一个值,那就是这样做的地方。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 还不错,大卫。
    【解决方案2】:

    尝试在所有代码后加上true

    before_save do
      self.indicator = true unless attribute_1 == "0" && attribute_2 == "0"
      true
    end
    

    所有回调都应该以任何方式返回 true

    【讨论】:

    • 谢谢,这很有帮助。事实证明,我的代码实际上是在更新我在数据库中查看错误记录的属性。尴尬!
    • 这是 Rails 中的一个很好的陷阱 - 我称之为错误 - before_save 不是验证!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2019-03-24
    • 2021-12-11
    相关资源
    最近更新 更多