⛓️

【Ruby】ppを使ったデバッグで関連モデルも出力させる

2023/08/02に公開

はじめに

ppを使ったデバッグでは、関連モデルは出力されません。
関連モデルまで出力させたい時の解決策を紹介します。

解決策

as_jsonを使用して、関連オブジェクトも含めたハッシュを生成

関連モデルも出力したい場合は、以下のようにas_jsonを使用して、関連オブジェクトも含めたハッシュを生成してから、ppで出力することができます!

class Hoge < ApplicationRecord
  has_one :piyo
end

class Piyo < ApplicationRecord
  belongs_to :hoge
end

hoge = Hoge.create(id: 1, name: "hoge")
piyo = Piyo.create(id: 1, name: "piyo", hoge_id: hoge.id)

# as_jsonを使用した場合
pp hoge.as_json(include: :piyo)
#=> {"id"=>1, "name"=>"hoge", "piyo"=>{"id"=>1, "name"=>"piyo", "hoge_id"=>1}}

as_json:includeオプションを渡すことで、関連するオブジェクトも含めたハッシュを生成することができます。上記の例では、Hogeオブジェクトに関連するPiyoオブジェクトも含めて、ハッシュを生成して出力しています。

to_jsonを使用してJSON形式の文字列を生成し、putsで出力

as_jsonはデフォルトでハッシュを返すため、結果をppで出力することができます。as_jsonを使わずに、to_jsonを使用してJSON形式の文字列を生成し、それをputsで出力することもできます。

class Hoge < ApplicationRecord
  has_one :piyo
end

class Piyo < ApplicationRecord
  belongs_to :hoge
end

hoge = Hoge.create(id: 1, name: "hoge")
piyo = Piyo.create(id: 1, name: "piyo", hoge_id: hoge.id)

# to_jsonを使用した場合
puts hoge.to_json(include: :piyo)
#=> {"id":1,"name":"hoge","piyo":{"id":1,"name":"piyo","hoge_id":1}}

これにより、Hogeオブジェクトと関連するPiyoオブジェクトを含めたJSON形式の文字列が生成され、それが出力されます。

関連資料

https://docs.ruby-lang.org/ja/latest/library/pp.html

Discussion