Как мы можем достичь обратного вызова вида before_save в ActiveRecord? - PullRequest
0 голосов
/ 16 августа 2011

Я хотел бы понять, как Ar обратные вызовы реализованы в ActiveRecord?Я думаю, это можно сделать с помощью методов Ruby Hook, но я не уверен, как я могу реализовать это в Ruby.Любые указатели или ссылки для этого будут высоко оценены.

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Взгляните на AR источник обратных вызовов . По сути, он использует обратные вызовы ActiveModel , которые используют обратные вызовы ActiveSupport .

Существует много метапрограммирования, но в основном он вызывает все before_ обратные вызовы перед запуском правильного метода (для этого и нужен super). Если вы хотите иметь возможность кодировать обратные вызовы так же легко, как ActiveRecord, используйте ActiveSupport. В противном случае вы можете пойти с чем-то вроде:

def method_with_callback
  if !respond_to?(:before_callback) || before_callback
    //method
    after_callback if respond_to? :after_callback
  end
end

Но подход ActiveSupport более модульный и более простой в обслуживании.

1 голос
/ 16 августа 2011

Я рекомендую вам посмотреть ActiveSupport::Callbacks, вам не нужно больше этого, чтобы иметь обратные вызовы для любого метода.

http://api.rubyonrails.org/classes/ActiveSupport/Callbacks.html

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