ruby-on-rails - 如何在 Rails 中验证字段,Active:Model::Validator
问题描述
我正在尝试编写一个验证器,它只会在销售状态为非活动状态时更新一本书的价格。
# frozen_string_literal: true
class BookPriceValidator < ActiveModel::Validator
def validate(record)
record.errors[:price] << "can't change price on book" if record.selling == "active"
end
end
我现在遇到的问题是即使未更新图书价格也会调用错误。仅当 :price 字段实际更改时,我如何才能调用此错误?
解决方案
您可以将条件更改为
if record.price_changed? && record.selling == "active"`
ActiveModel::Dirty跟踪对ActiveRecord
对象所做的未持久更改,并为每个属性添加便利方法[attribute_name]_changed?
。因此,您所要做的就是检查价格是否随着您当前的状况而变化。
推荐阅读
- javascript - 会话变量不是用 AJAX 定义的 - Node.js
- spring - 在自己的授权服务器中实现 OAUTH 2.0 的 Spring Boot 2
- java - Libgdx i18nbundle 仅适用于根捆绑包
- ruby - 避免在Ruby中改变方法参数的好习惯?
- java - 我应该如何让 AES 在 Java 中处理任意长度的字符串?
- progressive-web-apps - 每页方向的 Web 应用清单
- javascript - TypeScript - 区分空类型和空对象值
- android - 迁移室数据库,alter table,android?
- javascript - 通过javascript将自定义功能分配给inDesign上的按钮
- django - Django url 模式字符串