AR через имя класса модели?
Например есть модель Post.
belongs_to :project.
Надо запретить вызовы типа Post.where, Post.find и прочие
можно рубокоп написать на это
А вот это любопытно, спасибо )))
Да, можно сделать это, используя концепцию "полиморфизма". В Rails модели реализуют метод self.method_missing, который вызывается, когда вызывается неизвестный метод класса. Вы можете переопределить этот метод в вашей модели Post и бросить исключение, если вызывается метод, который вы не хотите разрешить. Вот пример, который блокирует вызовы where, find и all через имя класса модели: class Post < ActiveRecord::Base belongs_to :project def self.method_missing(method_name, *args, &block) if method_name == :where method_name == :find method_name == :all raise NoMethodError, "Direct calls to #{self}.#{method_name} are not allowed" else super end end end Теперь, когда вы попытаетесь вызвать Post.where, Post.find или Post.all, будет создано исключение NoMethodError. Чтобы вызвать эти методы, вам нужно будет использовать экземпляр модели Post, например post_model = Post.new или post_model.where.
Вы сами это писали? Стиль изложения очень похож на ChatGPT )
можно сделать это!
Конечно он родной:)
if [:where, :find, :all].includes?(method_name) бесплатный рефакторинг от дяди свацка
Вот после таких мегакостылей работать совсем не хочется, когда распутываешь почему случилось очередное гавно
Обсуждают сегодня