ruby-on-rails - 在 Rails ActiveRecord 验证期间更改或更新属性值

标签 ruby-on-rails ruby validation activerecord activemodel

总结:我正在尝试在自定义 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/

相关文章:

ruby - 快速将字符串拆分为多个数组

ruby - 你能用 Ruby 创建输入框吗?

Javascript 表单验证代码循环

ruby-on-rails - Ruby on Rails - Neo4J 连接被拒绝

ruby-on-rails - 服务器不会开始使用 authlogic-oauth2

ruby - 正则表达式 - 排除一个字符

eclipse - HTML Meta 的属性 - 标签在 eclipse 中抛出警告

ruby-on-rails - Rails 验证上下文

iphone - 需要一个 iOS 库或 iPhone 框架与 Ruby on Rails API 交互

ruby-on-rails - WHat 对象被传递到 Ruby on Rails 中的 create_table block