はじめに
pg
gemを使って、以前作ったメモアプリのメモデータをデータベースに保存するように変更しようとしました。
そうしたところ、データベースからデータを引っ張ってきたときに、「どうにも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]
のように、表示したいデータの項目を渡すとその値が表示されるということがわかりました。
最後に
今回初めて、データベースを利用したアプリの作成を行いました。この問題で結構時間が取られてしまったものの、なんとかなってホッとしています😅