本記事では、ActiveRecordでDBからデータを取得する例を全て解説します。
ActiveRecordは主にRuby on Railsで使われ、DBを操作する際にわざわぜSQL文を書くというめんどくさいことをせずに、データを取得できたりする便利なライブラリです。
データを取得するための実例を以下で紹介します。
レコード(データ)の取得方法
allメソッド(テーブル内の全てのデータを取得する)
データベースの特定のテーブル(モデル)から全てのデータを取得するには、以下のようにモデル名に続けて「.all」を呼ぶだけです。
モデル名.all
例えば、sportsテーブルから全てのデータを取得する場合、こうなります↓
> Sport.all # こう書くだけでsportsテーブルの全データが取れる
=> Sport Load (1.9ms) SELECT `sports`.* FROM `sports`
[#<Sport:0x000055a0adf1d2d8 id: 1, name: "バレーボール", is_ball_game: true, created_at: Sun, 06 Feb 2022 06:27:44.161805000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:27:44.161805000 UTC +00:00>,
#<Sport:0x000055a0adf1d210 id: 2, name: "野球", is_ball_game: true, created_at: Sun, 06 Feb 2022 06:28:15.481601000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:28:15.481601000 UTC +00:00>,
#<Sport:0x000055a0adf1d148 id: 3, name: "水泳", is_ball_game: false, created_at: Sun, 06 Feb 2022 06:28:38.307287000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:28:38.307287000 UTC +00:00>,
#<Sport:0x000055a0adf1d080 id: 4, name: "卓球", is_ball_game: true, created_at: Sun, 06 Feb 2022 06:28:51.215476000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:28:51.215476000 UTC +00:00>,
#<Sport:0x000055a0adf1cfb8 id: 5, name: "柔道", is_ball_game: false, created_at: Sun, 06 Feb 2022 06:29:04.048806000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:29:04.048806000 UTC +00:00>,
#<Sport:0x000055a0adf1cef0 id: 6, name: "陸上", is_ball_game: false, created_at: Sun, 06 Feb 2022 06:29:16.820780000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:29:16.820780000 UTC +00:00>,
#<Sport:0x000055a0adf1ce28 id: 7, name: "バスケットボール", is_ball_game: true, created_at: Sun, 06 Feb 2022 06:29:30.752943000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:29:30.752943000 UTC +00:00>,
#<Sport:0x000055a0adf1cd60 id: 8, name: "サッカー", is_ball_game: true, created_at: Sun, 06 Feb 2022 06:29:40.727927000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:29:40.727927000 UTC +00:00>]
SQLを直で書くと、
SELECT * FROM sports
と書かなければいけませんが、ActiveRecordを使うと非常にスッキリ書けますね。
firstメソッド(最初の1つだけを取得する)
モデル名に対してallメソッドを使用すると、そのモデル(テーブル)の全データが取得できますが、firstメソッドを使うと1番最初のデータを1つだけ取り出すことができます。
モデル名.first
例えば、sportsテーブルから初めのデータひとつだけを取得するには、以下のように書きます。
> Sport.first
=> #<Sport:0x000055a0ade7c450 id: 1, name: "バレーボール", is_ball_game: true, created_at: Sun, 06 Feb 2022 06:27:44.161805000 UTC +00:00, updated_at: Sun, 06 Feb 2022 06:27:44.161805000 UTC +00:00>
ActiveRecordの裏側で発行されているSQLは、以下と同様になります。
SELECT * FROM sports ORDER BY id ASC LIMIT 1
つまり、idを昇順に並べた時の、一番最初(id = 1)のデータが取得されたというわけです。