我想使用Sqlite3的create_function添加一个用户定义的函数,该函数将被数据库触发器使用。
有没有办法挂钩到ActiveRecord连接建立,每次与数据库建立连接时运行一些代码,哪里可以创建函数并使其可用于触发器?这对于在连接上设置编译指示也很有用。
答案 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
我不确定这个类是否会被重新加载,但如果我到达它,我将穿过那座桥。