Ruby on rails 基本铁路问题 class-Person:account\u id 结束

Ruby on rails 基本铁路问题 class-Person:account\u id 结束,ruby-on-rails,Ruby On Rails,我的问题是关于上述三行代码。顺便说一下,我是C++程序员,Ruby和Rails是新手。我被这句话弄糊涂了:验证…那是什么?变量 定义?函数调用?或者其他什么。对我来说,在类定义中这是一条奇怪的线。这是一个函数调用。您可以将其重写为验证唯一性关闭(:user\u name,:scope=>:account\u id)。在Ruby中,惯例是忽略这些括号。Rails将这些类方法作为ActiveRecord::Validations模块的一部分提供给您。可以为您提供有关如何定义它的更多信息,您还可以查看

我的问题是关于上述三行代码。顺便说一下,我是C++程序员,Ruby和Rails是新手。我被这句话弄糊涂了:
验证…
那是什么?变量
定义?函数调用?或者其他什么。对我来说,在类定义中这是一条奇怪的线。

这是一个函数调用。您可以将其重写为
验证唯一性关闭(:user\u name,:scope=>:account\u id)
。在Ruby中,惯例是忽略这些括号。Rails将这些类方法作为
ActiveRecord::Validations
模块的一部分提供给您。可以为您提供有关如何定义它的更多信息,您还可以查看源代码以了解它是如何实现的。希望有帮助。

这是一个函数调用。您可以找到更多验证模型的示例。

这是一个函数调用

该函数在模块(ActiveRecord::Validations)中定义。Ruby中的模块是对象,可以附加函数和变量

您可以包含模块并获取其成员。在这里,它是在父类中完成的:ActiveRecord::Base。如果你看一下它的定义,它的开头是这样的:

  class Person < ActiveRecord::Base
    validates_uniqueness_of :user_name, :scope => :account_id
  end
< C++和露比处理类声明的方式有一些明显的差异。首先,Ruby中没有编译。所以类定义可以在运行时更改。实际上,这是声明类的默认方式。换句话说:Ruby中的类总是开放的

其次,类主体可以有任何可执行代码。在C++中,不能从类定义中调用函数。这没有多大意义。然而,在Ruby中,由于您能够进行元编程,所以它会使您更容易理解。通过这种方式,您可以调用构造某些成员的函数。这就是写函数,可以写其他函数。它可以大大提高生产率,同时也会导致最严重的错误


我强烈建议大家参考一下这个条目。

@demas、rekin和anukul:ruby中类的定义中怎么会出现函数调用?如果我想完全理解ruby的哪一部分this@Haiyuan,我增加了两段来详细说明这一点。基本上,Rails是一个非常成熟的框架,使用了大量元编程。幕后的ActiveRecord对象拥有数十个字段和函数,用于处理(除其他外)验证、类型转换和SQL翻译。
module ActiveRecord
  class Base
    include ActiveRecord::Naming
    # ...
    include ActiveRecord::Validations
    #...
  end
end