Ruby on rails ActiveRecord中的验证是如何工作的?

Ruby on rails ActiveRecord中的验证是如何工作的?,ruby-on-rails,ruby,Ruby On Rails,Ruby,要在Rails中的模型内设置验证,我应该编写如下内容: class Post < ActiveRecord::Base validates :name, :presence => true validates :title, :presence => true, :length => { :minimum => 5 } end 为什么你认为你不能在类主体上调用方法?这些是类方法,这就是它们的调用方式——例如,请参见

要在Rails中的模型内设置验证,我应该编写如下内容:

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

为什么你认为你不能在类主体上调用方法?这些是类方法,这就是它们的调用方式——例如,请参见api的类方法中关于验证的位和验证的定义

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

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

Foo.bar #=> hello

class Thing < Foo
  bar
end
 #=> hello
class-Foo
def自我保护条
“你好”
结束
结束
Foo.bar#=>你好
类事物你好
您写道“但这不可能,因为(我相信)您不能直接在类主体中调用方法。”

但事实并非如此——代码是在类加载时执行的

考虑这一点:

class Hi
  puts "yo"
end
您将获得:

yo
 => nil

puts在加载时执行。所以你可以用它来创建其他的方法或者做任何你需要的事情

我用ruby编写了一个示例类,它试图在类体中调用它自己的一个方法,它告诉我“
未定义的局部变量或类Foo的方法‘bar’:class
”取决于它是哪种方法。如果它是定义为
def self.foo
的类方法,那么执行
class.foo
就可以了。如果它是一个定义为
defbar
的实例方法,那么首先需要
Class
的实例,如下所示:
Class.new.bar
。如果将其更改为
def self.foo
,您就是goldenReason:您将
foo
定义为实例方法,并且需要将其作为类方法才能在类的范围内。def self.foo将对您有效您可能需要更改标题的问题,因为它不能反映您真正想要的内容
yo
 => nil