Help us understand the problem. What is going on with this article?

heroku内のpostgresqlからデータを取り出す方法

More than 1 year has passed since last update.

はじめに

Gaiax Group Advent Calendar 2018の記事の一つです!

少し前にtechpitMarketさんの教材を参考にrailsで作ったアプリをherokuで公開したらみんなに遊んでもらえたのでデータベースからデータを取り出す方法について書きます!

作ったアプリについてはこちら

環境

-ruby on rails
-cloud9
-heroku

手順

初めにcloud9上で自分が作ったアプリの階層に移動します。
移動したらcloud9上からherokuにログインします。

$ cd "自分のアプリ名"
$ heroku login

このときうまくログインできなかったら以下のコマンドを試してみてください。

$ heroku login --interactive

あとは以下のコマンドを打てば

$ heroku run rails console
koppe:~/environment/seminar-ssi (master) $ heroku run rails console              
Running rails console on  seminar-ssi... up, run.1679 (Free)
Loading production environment (Rails 5.2.1)
irb(main):001:0>

このようにconsoleが立ち上がります!

テーブル内の全レコードを取得

.allを使ってテーブルの全レコードを取得しようとします。

irb(main):001:0> @datas = Inquiry.all
D, [2018-12-01T09:34:52.636125 #4] DEBUG -- :   Inquiry Load (4.0ms)  SELECT  "inquiries".* FROM "inquiries" LIMIT $1  [["LIMIT", 11]]

するとなぜかlimitが掛かっていてレコードが11件しか取り出せませんでした。

今度はこちらがlimitを指定してやってみました。

irb(main):005:0> @datas = Inquiry.limit(50)
D, [2018-12-01T09:43:52.664790 #4] DEBUG -- :   Inquiry Load (1.6ms)  SELECT  "inquiries".* FROM "inquiries" LIMIT $1  [["LIMIT", 11]]

これでもlimitが掛かってしまいました...

11件しか表示できない仕様なのかとあきらめかけていたら...

irb(main):012:0> Inquiry.first(20)
D, [2018-12-01T10:46:45.503676 #4] DEBUG -- :   Inquiry Load (0.9ms)  SELECT  "inquiries".* FROM "inquiries" ORDER BY "inquiries"."id" ASC LIMIT $1  [["LIMIT", 20]]

firstを使ったら任意のレコード数を取得できました!

firstは@hoge = テーブル名.frist(n)とすることで最初からn個データを取ってくることができます。

テーブル名.lastも同じように使えます。

irb(main):015:0> Inquiry.count
D, [2018-12-01T10:54:40.965828 #4] DEBUG -- :    (1.1ms)  SELECT COUNT(*) FROM "inquiries"
=> 106

countで全カラム数を取得して

irb(main):016:0> Inquiry.first(106)
D, [2018-12-01T10:56:04.402121 #4] DEBUG -- :   Inquiry Load (2.0ms)  SELECT  "inquiries".* FROM "inquiries" ORDER BY "inquiries"."id" ASC LIMIT $1  [["LIMIT", 106]]

firstの引数に入れてあげれば全データを取得できました!!

irb(main):020:0> Inquiry.where("email LIKE ?", "a8117%").first(50)
D, [2018-12-01T11:10:02.295685 #4] DEBUG -- :   Inquiry Load (3.8ms)  SELECT  "inquiries".* FROM "inquiries" WHERE (email LIKE 'a8117%') ORDER BY "inquiries"."id" ASC LIMIT $1  [["LIMIT", 50]]

こんな風に他の条件の最後にfirstを付けてあげればlimit(11)に縛られることなく検索できます!
下記の参考記事を見ながら色々遊んでみてください。

ここまで読んでくださりありがとうございました。

参考)
ActiveRecord + MySQLでレコード抽出
Rails - モデルから特定のカラムのみ取得
Railsのモデル検索あれこれ
Ruby on Railsを使っての基本的なデータ取得を学ぶ
Rails入門 where likeであいまい検索!複数条件やOR条件も解説

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away