⛓️
【Ruby】ppを使ったデバッグで関連モデルも出力させる
はじめに
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形式の文字列が生成され、それが出力されます。
関連資料
Discussion