总结:我正在尝试在自定义 ActiveModel::EachValidator
验证器 中更改属性值。给定以下原型(prototype):
def validate_each(记录,属性,值)
尝试设置 value = thing
似乎没有做任何事情——我是不是遗漏了什么?应该有一个聪明的方法来做到这一点......
详细信息:我接受 URL 输入作为网站的一部分。我不想只获取 URL 并直接验证它是否返回 200 OK
消息,因为那样会忽略不是以 http
开头或离开的条目出前导 www
等。我有一些自定义逻辑来处理这些错误并遵循重定向。因此,如果用户输入 example.org/article
而不是 http://www.example.org/article,我希望验证成功
。逻辑在验证中正常工作,但问题是如果有人输入前者,数据库中存储的值是“错误”的形式,而不是更新后的正确形式。我可以在验证期间将条目更改为更规范的形式吗?
最佳答案
你应该离开验证来做到这一点:validate;这不是操纵模型属性的正确位置。
参见 ActiveModel 的 before_validation 回调。这是一个更适合操作模型属性以准备验证的地方。
看起来你必须告诉你的 ActiveModel 实现回调,至少根据 this SO question .
class YourModel
extend ActiveModel::Callbacks
include ActiveModel::Validations
include ActiveModel::Validations::Callbacks
before_validation :manipulate_attributes
def manipulate_attributes
# Your manipulation here.
end
end
关于ruby-on-rails - 在 Rails ActiveRecord 验证期间更改或更新属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11727201/