Как правильно переопределить ActiveRecord find
, чтобы он вел себя одинаково при использовании в классе модели (например, Comment.find(1)
) и коллекции (например, post.comments.find(1)
)?
Давайте возьмем эти две простые модели в качестве примера:
class Post < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :post
def self.find(*args)
puts 'Overridden find called!'
super
end
end
С такими классами Comment.find(1)
правильно использует переопределенный метод, но post.comments.find(1)
все еще использует оригинальную версию find
.
Я знаю, что могу переопределить #find
в ActiveRecord::Associations::CollectionProxy
, но мне не нравится это решение, потому что оно влияет на каждую модель в приложении. Не могли бы вы предложить правильное решение?
EDIT:
Чего я хочу добиться:
Comment.find(1) # prints 'Overridden find called'
some_post.comments.find(1) # prints 'Overridden find called'
Post.find(1) # does NOT print 'Overridden find called', calls regular find