在 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:#update_attribute 与 #update_attributes
在rails中使用accepts_nested_attributes_for的三层嵌套表单