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

时间:2010-04-14 21:12:45

标签: ruby-on-rails database

我正在编写一个Ruby on Rails应用程序,我想要在每次修改数据库时调用一个方法。是否可以在不修改数据库的每个位置插入方法调用?

4 个答案:

答案 0 :(得分:1)

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

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

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

您可能可以使用一些元编程魔法来调整ruby代码以调用更改。

各种选择。

答案 1 :(得分:1)

如果要记录所有型号:

Monkey修补ActiveRecord :: Base类。

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

答案 2 :(得分:1)

我喜欢KandadaBooggu的答案,但如果你不想和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

的更新

答案 3 :(得分:0)

您是否考虑在ActiveRecord中使用:after_update或before_update:

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