やりたいこと(その1:一覧画面を降順表示し、n件で切り捨てたい)
コントローラーを変更する
例えば販売履歴(Sale)を最新から50件表示するようにします。
app/controllers/sales_controller.rb
を変更します。
# GET /sales or /sales.json def index @sales = Sale.order(id: :desc).limit(50) end
これだけです。
やりたいこと(その2:一覧画面を降順表示し、ページ処理を追加したい)
Gemfileに追記しインストール
まずはGemfile
にページネーション系のライブラリを追加します。
# ページネーション gem "kaminari" gem 'bootstrap5-kaminari-views'
kaminariがページネーション用のgemライブラリになります。
Bootstrapを使用している場合は、それ用のライブラリも追記します。
bundle install
で、kaminariをインストールします。
コントローラーに追記
まず、app/controllers/application_controller.rb
に追記します。
KAMINARI_PER = 50
もし、1ページの表示件数を他のページでも共通化したい場合は、app/controllers/application_controller.rb
に定数を定義しておくと良いでしょう。
次に、app/controllers/sales_controller.rb
を変更します。
# GET /sales or /sales.json def index @sales = Sale.all.page(params[:page]).per(KAMINARI_PER).order(id: :desc) end
やりたいこと(その1)にあったlimit()は外し、上記を追記します。
ビューに追記
app/views/sales/index.html.haml
に以下を追記します。
%br = paginate @sales, theme: 'bootstrap-5'
i18n関連ファイルに追記
上記でも実行できますが、ページ下部のボタン群を日本語化したいかと思います。
その場合は、下記を、任意のja.yml
に追記します。
ja: views: pagination: first: '最初' last: '最後' previous: '前' next: '次' truncate: '...'
これで実行し、確認します。