We can use pry and pry-byebug gem to help us dive into the source code.
Let’s see an example about
I found there’s a
as_json method for active record query result.
to_json returns String of json.
as_json returns a hash representing the model.
1 2 3 4 5 6 7 8 9
I find that
as_json can accepts some optons.
But one day I found somebody used similar options with
I searched the doc. No doc says
to_json can do things like following:
But the code above actually works.
as_json under the hood?
Dive into the source
Now we can check the source code to find the answer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Then we edit the method and add a binding.pry before the
if options.is_a?(::JSON::State) line.
Remember to recover the change after debug.
> edit Order.where(number: "201504211405490").to_json
Then run code again:
> Order.where(number: "201504211405490").to_json
Now we’ll get into
to_json_with_active_support_encoder method and start to debug.
After some next and step comand.
We can find that
to_json uses ActiveSupport::JSON.encode, which uses
# /lib/active_support/json/encoding.rb#34 # Encode the given object into a JSON string def encode(value) stringify jsonify value.as_json(options.dup) end
as_json. We find the answer. So we can use to_json(only: :number) with
Pry and pry-byebug provides many useful commands. Using these commands can help to find the definition of a method, track the call stacks, understand the source structure.
This is beauty of open source. Do not limit yourself. Dive into the code and get your information.