【Rails】ActiveRecordでデータベースからデータを取得する全方法

Rails

本記事では、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)のデータが取得されたというわけです。

タイトルとURLをコピーしました