LoginSignup
4
9

More than 3 years have passed since last update.

Ruby on Rails コンテンツの一覧を昇順/降順 にするメソッドとkaminari ページネーションの実装

Posted at

初めに

Ruby on Railsで作成しているブログのコンテンツ一覧などの昇順/降順にするメソッドとページネーションを実装するためのgem kaminariの実装メモです。

降順/昇順にするにはorderメソッドを使う

  • orderメソッドは、テーブルから取得してきたインスタンスたちを並び替えるメソッドである。

昇順の場合

contents_controller.rb
# 省略
def index
  @contents = Contents.all.order("id ASC")
end

降順の場合

contents_controller.rb
# 省略
def index
  @contents = Contents.all.order("id DESC")
end
  • allメソッドを利用した場合、通常であればレコードはid順に取得されるが、上記のようにorderメソッドの引数として(“id DESC”)とすれば、レコードを逆順に並び替えられる。

  • また、orderメソッドを利用する場合は、以下のようにallメソッドを省略することができる。

contents_controller.rb
# 省略
def index
  @contents = Contents.order("id DESC") # allメソッドを省略できる
end

ページネーション(kaminari)の実装

  • kaminariをいうGemの一種をインストールすることによって実装可能。

1. Gemfileの最後の行にkaminariを追記

Gemfile
# (省略)
gem 'kaminari'

2. bundle installを実行

ターミナル
bundle install
  • 必ずローカルサーバーを再起動することを忘れずに。

kaminari:pageメソッド

  • kaminariを導入すると、モデルクラスにpageメソッドが定義される。
  • このメソッドは、ページネーションにおけるページ数を指定する。
  • ビューのリクエストの際にparams中にpageというキーが追加されて、その値がビューで指定した番号になる。よってpageの引数はparams[:page]となる。

kaminari:perメソッド

  • perメソッドもpageメソッドと同様に、kaminariを導入することで使えるメソッドである。
  • 1ページあたりに表示する件数を指定する。
  • perメソッドに引数をして渡した数字が、ページネーションが実装されたビューで1ページあたりに表示する件数になる。

上記2つのメソッドは以下のような記述方法になる。

sample_controller.rb
変数名 = クラスを利用して取得したレコードのインスタンス.page(params[:page].per(ここに1ページで表示したい件数を入力)

contentsコントローラーのindexアクションに今度は投稿日時の降順で記述し、さらにページネーションを導入した記述をしてみると以下のようになる。

contents_controller.rb
# 省略
def index
  @contents = Contents.order("created_at DESC").params[:page].per(5)
end

kaminari:paginateメソッド

  • ページネーションのリンクを表示したいときに使用するメソッド。
  • kaminariをインストールすると利用できます。paginateメソッドの引数は、コントローラで定義した変数を指定する。

viewには<%= paginate(@contents) %>と記述すればよい。

contents.html.erb
<div>
  <% @contents.each do |content| %>
    # 省略
  <% end %>
  <%= paginate(@contents) %>
</div>

最後に

gemを入れると使える便利なメソッドがどんどん増えてとても便利。
積極的に使っていこうと思った。

4
9
1

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
4
9