究竟什么是验证和has_many?

时间:2016-02-18 20:26:45

标签: ruby-on-rails ruby

我不知道目的是什么或者他们在做什么,这些已在其他教程中解释过(例如this)。我觉得这些单词是某种定义的方法,可能来自超类(即ActiveRecord::Base),但是调用方法/函数超出任何方法是没有意义的。或者它是一种语言功能,我应该把这两个词作为内置关键字?它们是否仍在Ruby的范围内,或者语法来自Ruby on Rails框架?

给你一个具体的例子:

class Person < ActiveRecord::Base
    validates :email, confirmation: true
    validates :email_confirmation, presence: true
end

3 个答案:

答案 0 :(得分:2)

它们has_manyvalidates都是在rails gems中定义的方法。它们描述了rails模型的属性(Rails基于MVC) - 如何在保存之前验证模型以及它与其他模型的关系。

以下是定义:validateshas_many以及更多......

答案 1 :(得分:2)

正如我在上面的评论中提到的,validateshas_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的方法调用。由于您在类定义中,selfFoo,因此它本身就是Foo.say_goodbye

对于validateshas_many,Rails在模块中分别定义了这些模块(ActiveModel::ValidationsActiveRecord::Associations),这些模块最终在ActiveRecord中include d ::基础。我说“最终”因为Rails通过它的autoloading机制有点迂回,但是它的核心只是普通的Ruby。

答案 2 :(得分:0)

方法的名称

另外,猜测validates会为关联的类

添加其他方法

同样,猜测validates以及has_many都可以被认为采用元编程技术