【问题标题】:In Rails, how are validators, for example "validates_numericality_of" implemented?在 Rails 中,如何实现验证器,例如“validates_numericality_of”?
【发布时间】:2010-11-19 17:45:35
【问题描述】:

我是 Ruby 语言和 Rails 框架的新手。当我从“Head First Rails”一书中看到这段代码时:

类 ClientWorkout

validates_numericality_of :paid_amount

结束

我的问题是:

1) 从 Ruby 语言来看,validates_numericality_of 在哪里以及如何实现? ActiveRecord 框架之外的 Ruby 类是否可以使用它

2) validates_numericality_of 对 ClientWorkout 类的实例有什么作用?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby validation


    【解决方案1】:

    1) validates_numericality_of 是 Rails 框架中存在的众多验证之一,更准确地说是 ActiveRecord。所以它不是所有 Ruby 类都可以访问的。您使用它来传递代表模型属性的红宝石符号。可以同时传递多个属性:

    validates_numericality_of :age, :score
    

    但如果你想为不同的属性设置不同的设置,你也可以多次指定验证:

    validates_numericality_of :age
    validates_numericality_of :score, :allow_nil => true
    

    2) 通常做的验证是在调用 ClientWorkout.save() 时在保存到数据库之前验证模型是否“有效”。 validates_numericality_of 顾名思义就是验证传递的属性是数字的,而不是字符串、数组、布尔值等。

    如果任何验证未完成,则记录将不会保存到数据库。这当然可以通过调用 ClientWorkout.save(false) 来绕过,这将告诉 ActiveRecord 在不验证记录的情况下进行保存。

    【讨论】:

    【解决方案2】:

    validates_numericality_of 验证指定属性的值是否为数字。

    Active Record 是您的模型,每个模型对应于数据库中的一个表。因此,如果您在 ClientWorkout 类中使用 validates_numericality_of,它将仅验证该类/模型中的paid_amount。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2013-04-07
      • 2016-03-11
      • 2021-08-21
      相关资源
      最近更新 更多