1

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

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

4

1 回答 1

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

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

于 2014-01-17T21:32:24.397 回答