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