LoginSignup
5
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-03

はじめに

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条件も解説

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1