猴子在红宝石模块中修补一个块

时间:2017-02-23 18:06:32

标签: ruby-on-rails ruby monkeypatching

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合并为止,有没有办法修补包含的块?

1 个答案:

答案 0 :(得分:1)

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

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

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