【问题标题】:Can I hook into ActiveRecord connection establishment?我可以挂钩 ActiveRecord 连接建立吗?
【发布时间】:2023-03-11 14:28:01
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    这是我自己发现的。在 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
    

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

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      相关资源
      最近更新 更多