我可以挂钩进入ActiveRecord连接建立吗?

时间:2013-08-19 16:41:27

标签: activerecord sqlite ruby-on-rails-3.2

我想使用Sqlite3的create_function添加一个用户定义的函数,该函数将被数据库触发器使用。

有没有办法挂钩到ActiveRecord连接建立,每次与数据库建立连接时运行一些代码,哪里可以创建函数并使其可用于触发器?这对于在连接上设置编译指示也很有用。

1 个答案:

答案 0 :(得分:0)

这是我自己发现的。在app / config / initializers中使用初始化程序,我这样做:

ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do
  alias_method :orig_initialize, :initialize

  def initialize(connection, logger = nil, pool = nil)
    orig_initialize(connection, logger, pool)
    if connection.is_a? SQLite3::Database
      # 'reverse' is just an example :^)
      connection.create_function('reverse', 1) { |func, value| func.result = if value then value.to_s.reverse end }
    end
  end
end

我不确定这个类是否会被重新加载,但如果我到达它,我将穿过那座桥。

相关问题