代码之家  ›  专栏  ›  技术社区  ›  titaniumdecoy Mr. T

如何在每次修改数据库时调用方法

  •  0
  • titaniumdecoy Mr. T  · 技术社区  · 16 年前

    我正在编写RubyonRails应用程序,我希望每次修改数据库时都调用一个方法。是否可以在修改数据库的每个位置都不插入方法调用来执行此操作?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Will    16 年前

    我喜欢Kandadaboogu的回答,但是如果你不想和ar一起玩,你可以和一个观察者一起玩。

    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
    

    只需添加您想要观察的模型。在此示例中,它将记录对ModelA和ModelB的更新

        2
  •  1
  •   Will Hartung    16 年前

    取决于数据库。许多数据库都有非常强大的存储过程语言,可以调用Web服务。

    您可以在重要的数据库表上使用触发器调用调用方法的RubyWeb服务。

    或者,您可以让触发器更新事件表,然后让一个进程监视该表上的更改,然后激发该方法。

    可能还有一些元编程的魔力可以用来调整Ruby代码来调用更改。

    各种选择。

        3
  •  1
  •   Harish Shetty    16 年前

    如果要记录所有模型:

    monkey修补ActiveRecord::基类。

    class ActiveRecord::Base
      after_save :log_something
      after_destroy :log_something
    
    private
      def log_something
    
      end
    end
    

    对于特定型号:

    class User < ActiveRecord::Base
      after_save :log_something
      after_destroy :log_something
    
    private
      def log_something
    
      end
    end
    
        4
  •  0
  •   Tam    16 年前

    您是否考虑在ActiveRecord中使用:更新后或更新前:

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