¿Cómo convertir un objeto hash ruby ​​a JSON?

¿Cómo convertir un objeto hash ruby ​​a JSON? ¿Entonces estoy probando este ejemplo a continuación y no funciona?

Estaba mirando el RubyDoc y obviamente el objeto Hash no tiene un método to_json . Pero estoy leyendo en blogs que Rails admite active_record.to_json y también admite hash#to_json . Puedo entender que ActiveRecord es un objeto Rails, pero Hash no es nativo de Rails, es un objeto Ruby puro. Entonces en Rails puedes hacer hash.to_json , pero no en el puro Ruby ??

 car = {:make => "bmw", :year => "2003"} car.to_json 

Una de las numerosas sutilezas de Ruby es la posibilidad de ampliar las clases existentes con sus propios métodos. Eso se llama “reapertura de clase” o parche de monos (sin embargo, el significado de este último puede variar ).

Por lo tanto, mira aquí:

 car = {:make => "bmw", :year => "2003"} # => {:make=>"bmw", :year=>"2003"} car.to_json # NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash # from (irb):11 # from /usr/bin/irb:12:in `
' require 'json' # => true car.to_json # => "{"make":"bmw","year":"2003"}"

Como puede ver, requerir json ha llevado mágicamente el método to_json a nuestro Hash .

 require 'json/ext' # to use the C based extension instead of json/pure puts {hash: 123}.to_json