在Rails中,验证器如何实现,例如“validates_numericality_of”实现?

时间:2010-11-19 17:45:36

标签: ruby-on-rails ruby validation

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

class ClientWorkout<的ActiveRecord ::基

validates_numericality_of:paid_amount

我的问题是:

1)从Ruby语言中,validates_numericality_of在何处以及如何实现?是否可用于ActiveRecord框架之外的Ruby类

2)validates_numericality_of对ClientWorkout类的实例做了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

1)validates_numericality_of是Rails框架中存在的许多验证之一,或者更精确的是ActiveRecord。所以它不是所有Ruby类都可访问的东西。您可以使用它来传递代表模型属性的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在不验证记录的情况下进行保存。

答案 1 :(得分:0)

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

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