本日の担当:Coolmicエンジニア イシカワ
・2019年4月入社の新卒社員。
・水族館巡りが趣味。
・最近の行きたい水族館は四国水族館。
実装中
🙎🏼
「jsonに変換したいんだけど、to_json使ってるのになんだか上手くいかないなあ」
「ん?as_jsonっていうのもあるのか、、、これって何が違うんだ?」
検索中
🙎🏼
「えーと rails to_jsonで検索してrailsのリポジトリに飛んで、、、」
「毎回どこに書いてあるのかいちいち検索するのもめんどいなあ :innocent: 」
ブログさん ⭐️
「メソッドのsource探すならrails consoleでsource_location
を使うと便利やで」
「こんな感じであっという間や」
pry(main)> Title.find(1).method(:to_json).source_location => ["/app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.5.1/lib/active_support/core_ext/object/json.rb", 37]
🙎🏼
「え、一発じゃん、、、こんな便利なメソッドあったの?」
「gemとかのメソッドとかも良い感じに表示されるんかな?」
pry(main)> RestrictedTitleResource.new(Title.where(id: 1),params: {field: %i[id]}).method(:serializable_hash).source_location => ["/app/vendor/bundle/ruby/2.7.0/gems/alba-1.6.0/lib/alba/resource.rb", 66]
「完璧すぎ」
ブログさん ⭐️
「ついでにな、source.display
でメソッドの中身まで見ること出来るんやで?」
pry(main)> Title.find(1).method(:to_json).source.display def to_json(options = nil) if options.is_a?(::JSON::State) # Called from JSON.{generate,dump}, forward it to JSON gem's to_json super(options) else # to_json is being invoked directly, use ActiveSupport's encoder ActiveSupport::JSON.encode(self, options) end end
「こんな具合や!」
🙎🏼
「コンソールでメソッドの中身まで見れるの?」
「to_jsonでハマってこんな有益な情報が知れるとは、、、」
今回はソースコードの場所を表示してくれる
source_location
とメソッドの中身を表示してくれるsource.display
のご紹介でした!
to_jsonがうまく動作してなかったのはキャッシュが効いててそういう風に見えてただけでした、、、
でも今回ハマったおかげで便利なメソッドが学べて良かったです! 😆こちらのブログの方が分かりやすくまとめてくださっていたのですごく助かりました!
https://tanaken0515.hatenablog.com/entry/2020/04/24/231922