如何验证Ruby on Rails表单中的外部表单字段(例如验证码)?

时间:2009-03-26 06:46:01

标签: ruby-on-rails ruby validation

我有一个用户注册表,并想在我的注册方法中写一个人检测“验证码”。我决定创建一个简单的数学问题供用户回答(这应该适用于我的目的)。

如何编写检查此字段值的验证?我在模型文件中写了一个validate方法,如下所示:

def validate
  errors.add(:humanproof, "is not the right answer") if humanproof != 4
end

然而,因为:humanproof不是用户模型的一部分,因此“人防”变量不可用。

访问人性化变量的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以做的是添加虚拟属性。从RailsCasts中查看此screencast

基本上你想为你的班级添加一个属性。因为您不必使用它执行任何逻辑,所以您可以使用构建的Ruby方法表单实例变量。

 class Foo < ActiveRecord::Base
   attr_accessor :humanproof

   def validate
     errors.add(:humanproof, "is not the right answer") if humanproof != 4
   end

这会为您的类添加一个未保存到数据库的属性,并在请求期间附加到该对象。