【Rails】allメソッドを徹底解説!

Rails

allメソッドとは

allメソッドとは配列の全ての要素を取り出すメソッドです

環境構築(allメソッドの挙動を確認できる環境を構築していきましょう)

下記のコマンドを一つずつ実行していきましょう。
① git clone -b active_record_method_all https://github.com/miyagit/programan_dojo.git
② cd programan_dojo
③ bundle install
→ rbenv: version '2.4.1' is not installed と表示された場合は、
ruby -v と実行してください。

ruby -vと実行し出てきたversion(例: 2.3.1)と出てきたら、vim .ruby-versionとし、ruby -vで出てきた値(例: 2.3.1)に書き換えてください。

続いてvim Gemfileとし、ruby 2.4.1と書いてある部分をruby -vで出てきた値(例: 2.3.1)に書き換えてください。

④ rails db:create && rails db:migrate && rails db:seed
環境構築が完了しました。と表示されると、本当にrails applicationが動作するかrails sコマンドで起動しましょう。

rails sを起動し、ブラウザでlocalhost: 3000と入力して下記のような画面が出てくれば環境構築完了です!

ブラウザ
記事を読んでallメソッドを理解していきましょう!

allメソッドの構文

shell
1
2
3
4
5
6
7
8
9
10
11
12
User.all ←モデル名.all

//allメソッドの返り値
=> <ActiveRecord::Relation [<
User id: 1, name: "programan", job_id: 1, sex: 0, age: 25, tall: 175.0, weight: 68.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17">, #<
User id: 2, name: "programan_father", job_id: 2, sex: 0, age: 58, tall: 173.0, weight: 60.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17">, #<
User id: 3, name: "programan_mother", job_id: 3, sex: 1, age: 55, tall: 162.0, weight: 45.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17">,#<
User id: 4, name: "programan_bigsister", job_id: 4, sex: 1, age: 30, tall: 158.0, weight: 47.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17">,#<
User id: 5, name: "programan_sister", job_id: 5, sex: 1, age: 20, tall: 153.0, weight: 43.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17">, #<
User id: 6, name: "programan_bigbrother", job_id: 6, sex: 0, age: 28, tall: 178.0, weight: 63.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17">, #<
User id: 7, name: "programan_brother", job_id: 5, sex: 0, age: 22, tall: 172.0, weight: 64.0, created_at: "2018-12-14 01:21:17", updated_at: "2018-12-14 01:21:17"
>]>

allメソッドの解説

allメソッド
なぜこの様な返り値や出力値になるか、解説していきます。
allメソッドとはモデルのすべての要素を配列で取得します。
全ての要素を配列にした形が上記の返り値になるということです。
今回でいうとusersテーブルの全ての要素を使って何か処理を起こしたい時に使ったりします。

例えば、usersテーブルにはプログラマンの家族が全員で7人家族なので、User.all.lengthとすると7と出力されました。

usersテーブルの全ての要素がいくつか知りたい時にlengthを使えば良いわけです。
それ以外にもallメソッドはeach文と一緒に使うことがよくあります。
今usersテーブルには7人家族のデータがあります。
その家族の自己紹介をallメソッドとeachメソッドを使ってみます。

eachメソッド

このように配列の全ての要素を取って、その一つ一つにeachメソッドで処理を加える事がよく使われます。

ruby
1
2
3
4
User.all.each do |user|
  puts "名前: #{user.name}"
  puts "年齢: #{user.age}歳"
end

では実際にallメソッドとeachメソッドをrailsのビューでもどの様に活用できるか見てみましょう。
programan_dojo/app/controllers/Main_controller.rb
上記のファイルを開けてください。すると

ruby
1
2
3
4
5
class MainController < ApplicationController
  def top
   @title = 'allメソッドをどの様にビューで活用できるか確認しよう'
  end
end

上記の用に記載されていると思います。
それを下記のように書き換えてください。

ruby
1
2
3
4
5
6
class MainController < ApplicationController
  def top
   @title = 'allメソッドをどの様にビューで活用できるか確認しよう'
   @users = User.all
  end
end

これで@usersという変数に全てのuserが入りました。
それでは@usersの値を一つ一つ抽出して処理を行うeach文と一緒に使って、programan家族の自己紹介をしていきましょう。
/Users/yuya/Desktop/programan/programan_dojo/app/views/main/top.html.erbこちらのファイルをいじっていきます。

@usersがこちらのビューファイルで使うことが出来るので、eachメソッドを使って自己紹介表を作りましょう。

erb
1
2
3
<div class='p-top'>
    <p class='p-toptitle'>今回の記事の目標:<%= @title %></p>
</div>

上記から下記に変更してください。

erb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div class='p-top'>
  <p class='p-top__title'>今回の記事の目標:<%= @title %></p>
  <table border="1" class= 'p-top__introduce'>
    <tr>
    <th>名前</th>
    <th>年齢</th>
    <th>身長</th>
    <th>体重</th>
    </tr>
    <% @users.each do |user| %>
      <tr>
      <td><%= user.name%></td>
      <td><%= "#{user.age}歳" %></td>
      <td><%= "#{user.tall}cm" %></td>
      <td><%= "#{user.weight}kg" %></td>
      </tr>
    <% end %>
  </table>
</div>

こちらで自己紹介表ができましたね。
下記のように表示されましたでしょうか?

allメソッド

下記のように表示されていれば大丈夫です!
ただこちらでは少し窮屈ですね。
少しテーブルに余裕をもたせてあげましょう。

programan_dojo/app/assets/stylesheets
上記のファイルに変更を加えます。
↑こちらから↓に変更してください。
少し幅に余裕ができた下記の画像のようになっていれば完成です。

allメソッド

allメソッドとeachメソッドの組み合わせ方が分かりましたでしょうか?
読んでるだけではなく実際に自分でも打ち込んでみて挙動を理解してくださいね。

まとめ

allメソッドとは配列の全ての要素を取り出すメソッドで、eachメソッドと一緒に使うことが多いです