169 похожих чатов

А можно как-нибудь на уровне модели запретить прямой вызов

AR через имя класса модели?
Например есть модель Post.
belongs_to :project.
Надо запретить вызовы типа Post.where, Post.find и прочие

8 ответов

20 просмотров

можно рубокоп написать на это

Alexey- Автор вопроса

Да, можно сделать это, используя концепцию "полиморфизма". В 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.

Alexey- Автор вопроса
Федор
Да, можно сделать это, используя концепцию "полимо...

Вы сами это писали? Стиль изложения очень похож на ChatGPT )

Федор
Да, можно сделать это, используя концепцию "полимо...

Вот после таких мегакостылей работать совсем не хочется, когда распутываешь почему случилось очередное гавно

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта