验证如何在ActiveRecord中运行?

时间:2012-01-18 20:49:20

标签: ruby-on-rails ruby

要在Rails中的Model中设置验证,我应该写一些类似的东西:

class Post < ActiveRecord::Base
  validates :name,  :presence => true
  validates :title, :presence => true,
                    :length => { :minimum => 5 }
end

我无法弄清楚这是如何运作的。看起来它正在调用名为validates的方法并传递参数,但这不可能是因为,我相信我不能直接在类体中调用方法。

那么这里究竟发生了什么?

更新

从答案看来,这似乎是从固有的Base类调用一个方法,但为什么这不起作用?:

class Parent
  def foo
    puts "called foo"
  end
end

class Child < Parent
 foo
 foo
end

2 个答案:

答案 0 :(得分:1)

为什么你认为你不能在类体上调用方法?这些是类方法,它们是如何被调用的 - 例如参见验证位here以及api here

的类方法中验证的定义

你可以看到它在这里工作:

 class Foo
   def self.bar
     p 'hello'
   end
end

Foo.bar #=> hello

class Thing < Foo
  bar
end
 #=> hello

答案 1 :(得分:1)

你写道“但这不可能是因为(我相信)你不能直接在类体中调用方法。”

但事实并非如此 - 代码在加载类时正在执行

考虑一下:

class Hi
  puts "yo"
end

你会得到:

yo
 => nil

put在加载时执行。因此,您可以使用它来创建其他方法或执行您需要的任何操作。