モジュール下のモデルクラスで関連の拡張ができない

extension_module_nameに::が含まれてしまうために例外が発生する(2.0.2で確認。ソースをみると2.1でも起きそう)。とりあえず、initializer/active_record/association_ext.rb を作って以下を記述すれば動作する。

module ActiveRecord
  module Associations
    module ClassMethods
      def create_extension_modules(association_id, block_extension, extensions)
        extension_module_name = "#{self.to_s.gsub(/::/, '')}#{association_id.to_s.camelize}AssociationExtension"

        silence_warnings do
          Object.const_set(extension_module_name, Module.new(&block_extension))
        end

        Array(extensions).push(extension_module_name.constantize)
      end
    end
  end
end
Last modified:2020/06/12 18:49:09
Keyword(s):
References:[Ruby on Rails]