koheitakahashiのブログ

2020.07.01にプログラマーとして生を受けた私が学んだことや、日常について徒然に書いていきます。

pgでデータベースから引っ張ってきたデータの型を変えるには?

はじめに

pggemを使って、以前作ったメモアプリのメモデータをデータベースに保存するように変更しようとしました。

そうしたところ、データベースからデータを引っ張ってきたときに、「どうにもRubyの普通のオブジェクト(arrayやhashなど)と同じような操作ができない」という問題に直面しました。

データベースから引っ張ってきたデータの扱いに四苦八苦したため、まとめたいと思います。

問題

PG.connect().exec()で引っ張ってきたデータをpメソッドで出力したいが、#と出力されてしまう💦

問題となったコードは以下です。

require "pg"

conn = PG.connect(dbname: "memo")
p result = conn.exec("SELECT * FROM memo WHERE id ='#{id}'")

解決方法

以下のように、表示させるresultの中身を渡すことで、出力できるようになります。

conn = PG.connect(dbname: "memo")
result = conn.exec("SELECT * FROM memo WHERE id ='#{id}'")
p resulut["表示したいデータの項目(例: id, title, bodyなど)"]

解説

まず、問題としてresult = conn.exec("SELECT * FROM memo WHERE id ='#{id}'")が、返す値がどのようなデータ型なのか分からないということがありました。

そこで、実際にclassメソッドでどのクラスのオブジェクトなのかを確認しました。その結果、PG::reslut型だと判明しました。

result.class #=> PG::reslut

そして、PG: The Ruby PostgreSQL Driverを参照すると、PG::reslut型で使えるメソッドが紹介されており、result[n]のように、表示したいデータの項目を渡すとその値が表示されるということがわかりました。

最後に

今回初めて、データベースを利用したアプリの作成を行いました。この問題で結構時間が取られてしまったものの、なんとかなってホッとしています😅

参考サイト

PG: The Ruby PostgreSQL Driver

pg の使い方の簡単な説明 - 君の瞳はまるでルビー - Ruby 関連まとめサイト