如何理解 Ruby 类中的冒号运算符用法



我正在学习Ruby(2.3.x(和Rails(4.x(。我正在学习Ruby On Rails教程,我遇到了这种语法,并且在阅读时遇到问题:

class User < ApplicationRecord
  validates :name,  presence: true
  validates :email, presence: true
end

此类是否将validates定义为接受:name符号和哈希presence:true的方法?同样的事情也适用于第 3 行。

还是完全是别的什么?所有运行它的尝试都会导致:

uninitialized constant ApplicationRecord. 

我查看了来源(也许?(,但仍然不清楚。

这是

ApplicationRecord引入的特殊DSL。您实际要做的是在声明期间在类中调用这些方法。它会将这些验证添加到您的类中,因此每当您尝试保存记录时,如果您没有电子邮件或姓名,它都会失败

试试这个

user = User.new
user.save
user.valid? # false

并尝试在没有validates的情况下做同样的事情.

如果它会让你更清楚,你可以尝试像这样写这个类

class User < ApplicationRecord
  validates(:name, presence: true)
  validates(:email, presence: true)
end

validatesActiveModel::Validations 中作为类方法实现。

ActiveModel::Validations模块包含在 ApplicationRecord 中,因此您可以在加载 User 类时调用该方法。

validates接受一个数组,并将该数组的最后一个元素视为选项哈希(如果最后一个元素是哈希(。

validates 是 Active Record 提供的预定义helper,用于在 Rails 中使用,以使验证工作更容易,这样您就可以使用一些单行代码管理多个属性的多个验证。

由于它是 Rails 中的一个helper,它也是ActiveModel模块中定义的method,在框架的核心中,请参阅:active_model/validations.rb

最常见的是你遇到麻烦的presence attribute,它指定使用的属性不为空,通过 blank? 方法以 Ruby 方式执行此操作,以检查传递的值是否blank也不nil

最新更新