したがって、何が起こるかは次のとおりです。
RailsはActiveSupportにロードされます。ActiveSupportは、これらのas_jsonメソッドを次のようないくつかのクラスとモジュールに挿入します(モンキーパッチ) Enumerable。
module Enumerable
  def as_json(options = nil) #:nodoc:
    to_a.as_json(options)
  end
end
eachEnumerableが必要とするメソッドに対してはおそらく何も返さないので、をto_a返し[]、空の配列をStringに変換し"[]"ます。
ここでできることは、オブジェクトを列挙不可能な継承クラスにバインドし、その.as_jsonメソッドを使用することです。
このような:
class A
  def as_json(*)
    Object.instance_method(:as_json).bind(self).call
  end  
end
デモ:
➜ pry
require 'active_support/all'
=> true
class A
  def initialize
    @a = 1
  end  
end  
=> nil
A.new.to_json
=> "{\"a\":1}"
class A
  include Enumerable
  def each
  end
end
=> nil
A.new.to_json
=> "[]"
class A
  def as_json(*)
    Object.instance_method(:as_json).bind(self).call
  end  
end  
=> nil
A.new.to_json
=> "{\"a\":1}"