澄清Rails中的Ruby语法

Man*_*iri 1 ruby validation syntax ruby-on-rails

我正在学习Rails,在浏览官方指南时,我遇到了一些我无法理解其含义的代码.

情况1 -

class Person < ApplicationRecord
  validates :name, presence: true
end 
Run Code Online (Sandbox Code Playgroud)

在我看来,这validates是一个采用称为:name参数的符号的方法.但那么,是什么presence?这也是一种方法吗?但如果是,是什么的意义:之后presence.我知道true正在设置的值presence,作为一种验证,需要存在(换句话说).但我对语法不太清楚.

它也可能presence: true只是一个哈希,其中:presence(符号)是键,并且true是值.

案例2 -

class Person < ApplicationRecord
  validates :terms_of_service, acceptance: true, message: 'must be abided'
end 
Run Code Online (Sandbox Code Playgroud)

同样,validates是将符号:terms_of_service作为参数的方法.但其余的呢?它是一个具有2个键值对的哈希,有点像{acceptance: true, message: 'must be abided'}吗?

如果它确实是一个哈希值,为什么validates在每种情况下它都被添加到方法中?为什么不能

validates :terms_of_service
acceptance: true, message: 'must be abided'
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

the*_*ter 5

这是将哈希传递给方法的语法.这是做什么的validates(:terms_of_service, {acceptance: true, message: 'must be abided'}).这是将额外选项传递给方法的常用方法.