Где валидный метод находится в ActiveRecord :: Base? - PullRequest
2 голосов
/ 10 октября 2010

Я понимаю, что документация к Rails 3.0.0 метод validates находится в ActiveModel::Validations::ClassMethods

Мне было интересно, как у класса, который наследуется от ActiveRecord::Base, есть метод validates?

Например, обычно используют валидаты таким образом:

class User < ActiveRecord::Base   
  attr_accessible :name, :email

  validates :name, :presence => true  
end

Я посмотрел на иерархию классов и похоже, что SomeModelClass расширяет ActiveRecord::Base расширяет Object

Как метод в Active::Validations::ClassMethods доступен для объекта модели, который наследуется от ActiveRecord::Base?

Большое спасибо за вашу помощь!

1 Ответ

2 голосов
/ 10 октября 2010

ActiveRecord :: Base вызывает Base.class_eval { include Validation } (и множество других включений), что делает методы внутри ActiveRecord :: Validations доступными как макросы класса.

Вот фактическая строка: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb#L306

Вы увидите подобные вещи по всему Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...