wwwave'sTechblog |ウェイブのエンジニアブログ

株式会社ウェイブのエンジニアによるテックブログです。会社の話や Ruby、Vue.jsについてなど技術的な話をしていきたいと思います。

株式会社ウェイブの人事部ブログです。社内の雰囲気やイベント、福利厚生などについてお伝えいたします!

株式会社ウェイブのエンジニアブログです。 エンジニアの目線から会社の話や技術的な話をしていきます。

「railsのこのメソッドどこに定義されてるんだ?」

本日の担当: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

トップに戻る