Как указывалось ранее, причина, по которой вы найдете метод, находится в
Класс отношений должен делать что-то вроде:
# Assume class User < ActiveRecord::Base
u = User.where('1=1').find(1)
Если вы посмотрите глубже:
puts User.where('1=1').class.name
=> "ActiveRecord::Relation"
И так как класс Relation включает в себя модуль FinderMethods, метод find будет доступен как метод экземпляра класса Relation, поэтому вы можете выполнить упомянутый вызов:
User.where('1=1').find(1)
Теперь, если вам интересно, почему вы можете сделать это:
User.find(1)
Вы должны взглянуть на эту строку в классе ActiceRecord :: Base
extend Querying
И если вы увидите модуль ActiveRecord :: Querying, вы найдете следующую строку:
delegate :find, :take, :take!, :first, :first!, :last, :last!, :exists?, :any?, :many?, :none?, :one?, to: :all
Итак, что здесь происходит, так это то, что ActiveRecord :: Base будет иметь метод класса find, потому что он расширяет запрос, который делегирует метод find через весь метод, определенный в классе Relation. Ключевым моментом здесь является понимание того, что делают делегаты, и вот что можно сделать:
https://apidock.com/rails/Module/delegate