したがって、何が起こるかは次のとおりです。
RailsはActiveSupportにロードされます。ActiveSupportは、これらのas_json
メソッドを次のようないくつかのクラスとモジュールに挿入します(モンキーパッチ) Enumerable
。
module Enumerable
def as_json(options = nil) #:nodoc:
to_a.as_json(options)
end
end
each
Enumerableが必要とするメソッドに対してはおそらく何も返さないので、を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}"