【发布时间】:2010-03-25 21:12:15
【问题描述】:
我有一些初始化函数,用于在 PostgreSQL 的数据库服务器端(即,不是 rails)设置审计日志。在将数据插入或更新任何已审计的表之前,必须发出至少一个(设置当前用户),否则整个查询将失败。
每次在代码中运行任何保存操作之前,我都可以轻松地调用它们,但是 DRY 让我认为我应该在尽可能少的地方重复代码,特别是因为这与数据库不可知论的理想有很大不同。目前我正在尝试在初始化程序中覆盖 ActiveRecord::Base.establish_connection 以对其进行设置,以便在我自动连接后立即运行查询,但它的行为不像我预期的那样。这是初始化程序中的代码:
类 ActiveRecord::Base # 扩展类方法,而不是实例方法 类 sycobuny:~/rails$ ruby 脚本/服务器 => 启动 WEBrick => Rails 2.3.5 应用程序从 http://0.0.0.0:3000 开始 将自定义建立连接加载到 ActiveRecord::Base这不会给我任何错误,不幸的是我无法检查该方法内部的样子(我使用的是 ActiveRecord::Base.method(:establish_connection),但显然每次都会创建一个新的 Method 对象它被调用,这似乎毫无价值,因为我无法检查 object_id 是否有任何有价值的信息,我也无法反转编译)。
但是,代码似乎永远不会被调用,因为任何对数据库对象运行保存或更新的尝试都会失败,正如我之前预测的那样。如果这不是在连接到数据库时立即执行代码的正确方法,那是什么?
【问题讨论】:
标签: ruby-on-rails postgresql database-connection