要在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
答案 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在加载时执行。因此,您可以使用它来创建其他方法或执行您需要的任何操作。