Как вызвать ошибку в Ruby на Rails, если функция не вызывается в after_create - PullRequest
0 голосов
/ 08 апреля 2020

Допустим, у меня есть метод в моей модели

class Mod < ...
   after_create :update_some_stuff

   private

   def update_some_stuff
       ....
   end
end

И я хочу убедиться, что «update некоторый материал» вызывается только после create, и вызвать ошибку, если он вызывается в любом другой контекст. Есть ли способ сделать это в Ruby на Rails?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Это хакерство, и вам, вероятно, не нужно проверять это, потому что Rails проверяет это для вас, но это должно работать:

class Mod < ...
   after_create :update_some_stuff

   private

   def update_some_stuff
     return unless id_previously_changed?
     # do something
   end
end

Это подключается к previous_changes, который реализован ActiveModel::Dirty.

1 голос
/ 08 апреля 2020

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

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