0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

each文で出力するデータの数を指定したり順番をランダムにしたりする方法【Rails】

Posted at

目的

テーブルからデータを取り出す方法としてeach文を使用するのは一般的ですが、大量のデータから指定したデータ数だけ取り出したいときや、データをランダムで出力したいというときに使用する方法についてまとめます。

本記事は

  • 出力する数を指定する
  • ランダムに出力する
  • 上記2つを組み合わせる

という構成で紹介します。

数を指定する

hogesテーブルから10個だけデータを取り出したいという場合は、コントローラとビューファイルで下記の設定をします。

hoges_controller.rb
# 対象のアクション内で
@hoges = Hoge.all
viewファイル
<% @hoges.limit(10).each do |hoge| %>
# ~~~~~
<% end %>

@変数に対して.limitメソッドをしてからeach処理をする。というシンプルな流れです。

.limitメソッド以外にも、新しいデータや古いデータから任意の数を取り出す方法もあります。
詳細は下記を参照してください。
【ruby】配列を指定回数だけループ(each)で処理する (Yohoe Isokawa)

ランダムに出力する

hoges_controller.rb
# 対象のアクション内で
@hoges = Hoge.order("RANDOM()").all

ランダムに出力する場合は、コントローラで@変数を設定する時点でモデルに対して.order("RANDOM()")のメソッドをおこないます。
ビューファイルは下記のように設定することでHogeモデルに格納されたデータをランダムに出力することができます。

ビューファイル
<% @hoges.each do |hoge| %>
# ~~~~~
<% end %>

アクション内で@hogesを定義しているので、ビューファイルはいつも通りの記載方法ですね。

2つを組み合わせる

上で紹介した2つを組み合わせることも可能です。
例えばhogesテーブル内からランダムに2つのデータを出力したいとき

hoges_controller.rb
# 対象のアクション内で
@hoge = Hoge.order("RANDOM()").all
viewファイル
<% @hoges.limit(2).each do |hoge| %>
# ~~~~~
<% end %>

とすることで機能を実装することができます。

まとめ

今回は、each文で出力するデータの数を指定したりランダムにしたりする方法を紹介しました。
ページを更新する度に出力されるデータが変わる様子は見ていて面白いですし、アイデア次第で色々なものが作成できそうです。
たとえばおみくじサイトや、Twitterで見かける「〇〇メーカー」なんかも似たような方法で作成していると予想できます。

参考サイト

limit (Railsドキュメント)

Railsでのランダム表示を実装してみた 簡単![初心者向け] (Qiita)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?