配列から任意の数だけ取り出して表示したい


やりたいこと

記事を表示するとき、上段と下段で表示数を分けて表示したい

個別記事のデザインは同じ(同じ部分テンプレートを使う)

posts_controller.rb
@posts = Post.all.limit(8)

コントローラでは8件の記事を取得したとする

実装するにあたって考えた方法

@postsには8件の記事がハッシュに入っている
→ハッシュの中の最初の2件を取得して上段に表示
→その2件を除いて、ハッシュの中から3件を取得して下段に表示

配列の中から最初の2件を取得する

take
配列の先頭から引数n個の要素を取り出して、新しい配列を作成して返す

[1] pry(main)> fruits = [ "orange", "apple", "lemon", "strawberry", "banana", "grape" ]
=> ["orange", "apple", "lemon", "strawberry", "banana", "grape"]
[2] pry(main)> fruits.take(2)
=> ["orange", "apple"]

配列の中から最初の2件を除いて残りの要素を取得する

drop
配列の先頭から引数n個の要素を取り除き、残りで新しい配列を作成して返す。

[3] pry(main)> fruits.drop(2)
=> ["lemon", "strawberry", "banana", "grape"]

最終的な実装方法

posts/index.html.erb

# コントローラで取得した8件の記事(ハッシュに格納されている)の中から最初の2件を取得して表示
<div>
  <%= render partial: "posts/post", collection: @posts.take(2) %>
</div>
# コントローラで取得した8件の記事(ハッシュに格納されている)の中から最初の2件を除外して、さらに残りの6件から3件を取得して表示
<div>
  <%= render partial: "posts/post", collection: @posts.drop(2).limit(3) %>
</div>

参考

https://qiita.com/yokke0059/items/af8bbe4f0f4c581bd3a7