2010-04-14 6 views

Répondre

1

J'aime la réponse de KandadaBooggu mais si vous ne voulez pas le singe avec AR vous pourriez être en mesure de le faire avec un observateur.

class AllObserver < ActiveRecord::Observer 
    observe :model_a, :model_b 

    def after_save(record) 
    logger.info("CREATED #{record.class}") 
    end 

    def after_update(record) 
    logger.info("UPDATED #{record.class}") 
    end 
end 

Ajoutez simplement les modèles que vous voulez observer. Dans cet exemple, il consignera les mises à jour de ModelA et ModelB

1

Dépend de la base de données. De nombreuses bases de données ont des langages de procédure stockée très puissants qui peuvent, entre autres, appeler des services Web.

Vous pouvez avoir un déclencheur sur les tables de base de données importantes appelez un service Web Ruby qui appelle votre méthode.

Vous pouvez également avoir des déclencheurs qui mettent à jour une table d'événements, puis disposer d'un processus qui surveille les modifications sur cette table et déclenche ensuite la méthode.

Il y a probablement de la magie de méta-programmation que vous pourriez utiliser pour modifier votre code ruby ​​pour invoquer le changement.

Toutes sortes d'options.

+0

+1 à l'aide d'un déclencheur. Exactement ce que le db est pour. –

1

Si vous voulez vous connecter tous les modèles:

le patch singe ActiveRecord :: classe de base.

class ActiveRecord::Base 
    after_save :log_something 
    after_destroy :log_something 

private 
    def log_something 

    end 
end 

Pour un modèle spécifique:

class User < ActiveRecord::Base 
    after_save :log_something 
    after_destroy :log_something 

private 
    def log_something 

    end 
end 
Questions connexes