我不知道目的是什么或者他们在做什么,这些已在其他教程中解释过(例如this)。我觉得这些单词是某种定义的方法,可能来自超类(即ActiveRecord::Base
),但是调用方法/函数超出任何方法是没有意义的。或者它是一种语言功能,我应该把这两个词作为内置关键字?它们是否仍在Ruby的范围内,或者语法来自Ruby on Rails框架?
给你一个具体的例子:
class Person < ActiveRecord::Base
validates :email, confirmation: true
validates :email_confirmation, presence: true
end
答案 0 :(得分:2)
它们has_many
和validates
都是在rails gems中定义的方法。它们描述了rails模型的属性(Rails基于MVC) - 如何在保存之前验证模型以及它与其他模型的关系。
答案 1 :(得分:2)
正如我在上面的评论中提到的,validates
和has_many
是Ruby中的普通类方法。
关于你的问题“你能在方法之外进行[方法]调用吗?”我觉得你引用的代码提供了答案:是的。
与某些编程语言不同,Ruby类和模块定义不是特殊的独角兽。您可以在其中执行任何Ruby代码。这是一个例子:
class Foo
def self.say_goodbye
puts "Goodbye!"
end
puts "Hello!"
say_goodbye
end
亲自尝试看看它的作用。
好的,破坏者:此代码创建了类Foo并立即打印Hello!
和Goodbye!
。在倒数第二行say_goodbye
是一个等同于self.say_goodbye
的方法调用。由于您在类定义中,self
是Foo
,因此它本身就是Foo.say_goodbye
。
对于validates
和has_many
,Rails在模块中分别定义了这些模块(ActiveModel::Validations和ActiveRecord::Associations),这些模块最终在ActiveRecord中include
d ::基础。我说“最终”因为Rails通过它的autoloading机制有点迂回,但是它的核心只是普通的Ruby。
答案 2 :(得分:0)
方法的名称
另外,猜测validates
会为关联的类
同样,猜测validates
以及has_many
都可以被认为采用元编程技术