我目前正在创建一个 Rails 应用程序。
我正在编写一个模型并想添加一些验证。
从文档中我看到做这样的事情是可行的
class Person < ApplicationRecord
validates :terms_of_service, acceptance: { message: 'must be abided' }
end
我试图在这里理解 validates 方法。
在更一般的层面上,我想更好地理解 Rails 文档。
我的理解是validates是ApplicationRecord::Base的一个类方法。可以使用各种参数和选项重用它。我找到的最好的文档是 https://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates。
我不明白在哪里可以找到所有验证选项和参数的列表。
在这种情况下,
- 什么是接受?
- 我在哪里可以在文档中找到它的描述?
- 我在哪里可以找到所有其他可能的验证参数的列表?
任何有关如何更好地理解 ruby on rails 文档的提示将不胜感激。
回答1
validates :terms_of_service, acceptance: true
acceptance
映射到 AcceptanceValidator
这是一个默认的 rails 验证器:
https://github.com/rails/rails/blob/main/activemodel/lib/active_model/validations/acceptance.rb
示例中列出了所有默认验证器:
https://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates
absence
acceptance
confirmation
exclusion
format
inclusion
length
numericality
presence
以及由 ActiveRecord
添加的其他验证器:
associated
uniqueness
https://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html
每个验证器的可用选项都记录在此处的辅助方法中:
https://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html
validates :terms_of_service, acceptance: true
# is the same as using a helper method
validates_acceptance_of :terms_of_service
# and both map to rails default `AcceptanceValidator`
你也可以有自定义验证器:
validates :terms_of_service, terms: true # maps to `TermsValidator`
# because there is no TermsValidator class in rails, you have to define it
# class TermsValidator
# # TODO: see docs for examples of custom validators
# end
https://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations