猴子在 ruby 的模块中修补一个块

monkey patch a block in a module in ruby

module Cequel
  module Record

    module Schema
      extend ActiveSupport::Concern
      extend Util::Forwardable

      included do
        class_attribute :table_name, instance_writer: false
        self.table_name = name.demodulize.tableize.to_sym unless name.nil? || self.table_name.present?
      end
    end
  end
end

我想在我的 rails 应用程序中从这个模块中修改 included 块,但是当我在 rails 的初始化程序中定义相同的代码时,我得到

included': Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks)

This 是我想用补丁修复的,直到这个 PR 被合并,有没有办法修补包含的块?

您需要在初始化程序中从头开始。也就是说,您应该使用

完全删除模块常量定义
Cequel::Record.send :remove_const, :Schema

现在您可以重新执行代码段,根据需要定义 Schema:Ruby 不再了解它。