目的
テーブルからデータを取り出す方法としてeach文を使用するのは一般的ですが、大量のデータから指定したデータ数だけ取り出したいときや、データをランダムで出力したいというときに使用する方法についてまとめます。
本記事は
- 出力する数を指定する
- ランダムに出力する
- 上記2つを組み合わせる
という構成で紹介します。
数を指定する
hogesテーブルから10個だけデータを取り出したいという場合は、コントローラとビューファイルで下記の設定をします。
# 対象のアクション内で
@hoges = Hoge.all
<% @hoges.limit(10).each do |hoge| %>
# ~~~~~
<% end %>
@変数に対して.limitメソッドをしてからeach処理をする。というシンプルな流れです。
.limitメソッド以外にも、新しいデータや古いデータから任意の数を取り出す方法もあります。
詳細は下記を参照してください。
【ruby】配列を指定回数だけループ(each)で処理する (Yohoe Isokawa)
ランダムに出力する
# 対象のアクション内で
@hoges = Hoge.order("RANDOM()").all
ランダムに出力する場合は、コントローラで@変数を設定する時点でモデルに対して.order("RANDOM()")のメソッドをおこないます。
ビューファイルは下記のように設定することでHogeモデルに格納されたデータをランダムに出力することができます。
<% @hoges.each do |hoge| %>
# ~~~~~
<% end %>
アクション内で@hogesを定義しているので、ビューファイルはいつも通りの記載方法ですね。
2つを組み合わせる
上で紹介した2つを組み合わせることも可能です。
例えばhogesテーブル内からランダムに2つのデータを出力したいとき
# 対象のアクション内で
@hoge = Hoge.order("RANDOM()").all
<% @hoges.limit(2).each do |hoge| %>
# ~~~~~
<% end %>
とすることで機能を実装することができます。
まとめ
今回は、each文で出力するデータの数を指定したりランダムにしたりする方法を紹介しました。
ページを更新する度に出力されるデータが変わる様子は見ていて面白いですし、アイデア次第で色々なものが作成できそうです。
たとえばおみくじサイトや、Twitterで見かける「〇〇メーカー」なんかも似たような方法で作成していると予想できます。