Summary:我正在尝试更改属性的值within一个习俗ActiveModel::EachValidator
验证器。给出以下原型:
def validate_each(record, attribute, value)
试图设置value = thing
似乎什么也没做——我错过了什么吗?应该有一个聪明的方法来做到这一点......
Detail:我接受 URL 输入作为网站的一部分。我不想只获取 URL 并直接验证它是否返回200 OK
消息,因为这会忽略不以http
,或者省略前导www
等等。我有一些自定义逻辑来处理这些错误并遵循重定向。因此,我希望验证succeed如果用户输入example.org/article
而不是http://www.example.org/article
。逻辑在验证中正常工作,但问题是,如果有人输入前者,数据库中存储的值将采用“错误”形式,而不是良好更新的形式。我可以在验证期间将条目更改为更规范的形式吗?
您应该让验证来做到这一点:validate;它不是操作模型属性的正确位置。
请参阅 ActiveModel 的验证前 http://apidock.com/rails/ActiveModel/Validations/Callbacks/ClassMethods/before_validation打回来。这是在准备验证时操作模型属性的更合适的地方。
看起来你必须告诉你的 ActiveModel 实现有关回调的信息,至少根据这个问题 https://stackoverflow.com/questions/8936906/whats-the-correct-way-to-make-before-validation-etc-work-in-an-activemodel.
class YourModel
extend ActiveModel::Callbacks
include ActiveModel::Validations
include ActiveModel::Validations::Callbacks
before_validation :manipulate_attributes
def manipulate_attributes
# Your manipulation here.
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)