在 Rails 5.1 之后,attribute_changed 是如何变化的?更改“验证”回调?

Posted

技术标签:

【中文标题】在 Rails 5.1 之后,attribute_changed 是如何变化的?更改“验证”回调?【英文标题】:In post Rails 5.1, how does attribute_changed? chage for "validate" callbacks? 【发布时间】:2022-01-20 18:33:58 【问题描述】:

在 Rails 4.1 中,我曾经在我的模型中更改属性时调用验证方法

  validate :my_attribute_is_valid, if: :my_attribute_changed?

使用 Rails 5.1 及更高版本(我使用的是 6),attribute_changed?已更改 before_ 和 after_ 回调(分别为 saved_change_to_attribute?和 will_save_change_to_attribute?)。更改“验证”方法检查的正确方法是什么?

【问题讨论】:

【参考方案1】:

正确的是:will_save_change_to_attribute?

验证在save 回调之前运行,因此,您还不能检查saved_changes。 Available callbacks.

正如will_save_change_to_attribute? 的文档中所述:

下次保存时这个属性会改变吗? 此方法在验证和回调之前很有用,以确定下一次保存调用是否会更改特定属性。它可以作为 will_save_change_to_name 调用吗?而不是 will_save_change_to_attribute?("name")。

【讨论】:

以上是关于在 Rails 5.1 之后,attribute_changed 是如何变化的?更改“验证”回调?的主要内容,如果未能解决你的问题,请参考以下文章

将 Vue.js 添加到 Rails 5.1 和 Mocha 中的单元测试不起作用

Rails find_or_create_by 多个属性?

Rails:#update_attribute 与 #update_attributes

在rails中使用accepts_nested_attributes_for的三层嵌套表单

在 Rails 中使用 accept_nested_attributes_for + 批量分配保护

如何在 Webpacker 中使用 Rails Url 助手/Rails 5.1 中的 React-rails