🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

解決済

2回答

2134閲覧

rails6 kaminariでのページネーションのカスタマイズについて

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2020/12/08 05:35

前提・実現したいこと

Ruby on Railsでkaminariを使ってページネーションのカスタマイズを考えています。
現在のページネーションは下記です。
![https://i.gyazo.com/dac0220c94fbc6b8dcfed9f929e3b5fa.png
行いたいカスタマイズは下記のように5ページ表示になります。

(前へ) (1) (2) (③) (4) ・ (10) (次へ)
(前へ) (1) ・ (3) (④) (5) ・ (10) (次へ)
※○が表示ページです。

こちら解決策ございましたら、ご教授頂けますと幸いです。
必要なファイルなどございましたら、お申し付けください。
よろしくお願いいたします。

該当のソースコード

views

1<ul id="pagination"> 2 <li class="pagination"><%= paginate @admins %></li> 3</ul>

controller

1def news 2 @admins = Admin.order("created_at DESC").page(params[:page]).per(1) 3end

yml

1ja: 2 time: 3 formats: 4 default: "%Y%m月%d日" 5 views: 6 pagination: 7 previous: "前へ" 8 next: "次へ" 9 truncate: "・"

config

1# frozen_string_literal: true 2 3Kaminari.configure do |config| 4 config.default_per_page = 8 5 config.max_per_page = nil 6 # config.window = 3 7 # config.outer_window = 0 8 # config.left = 0 9 # config.right = 0 10 # config.page_method_name = :page 11 # config.param_name = :page 12 # config.max_pages = nil 13 # config.params_on_first_page = false 14end

paginator

1<%= paginator.render do %> 2 <nav class="pagination" role="navigation" aria-label="pager"> 3 <%= prev_page_tag %> 4 <% each_page do |page| %> 5 <% if page.display_tag? %> 6 <%= page_tag page %> 7 <% elsif !page.was_truncated? %> 8 <%= gap_tag %> 9 <% end %> 10 <% end %> 11 <% unless current_page.out_of_range? %> 12 <%= next_page_tag %> 13 <% end %> 14 </nav> 15<% end %>

試したこと

記事を参考にviewsやconfigなど触ってみたのですが、変更はありませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2020/12/08 06:53

そもそも、このkaminariは動いているのでしょうか?
退会済みユーザー

退会済みユーザー

2020/12/08 07:01

FKM様 ご質問ありがとうございます。 ページ上部で表示している画像が現状のものになっておりまして、ページネーション 自体は問題なく機能しておりますので、kaminariは動いているかと思います。
guest

回答2

0

ここの設定がコメントのままですが、コメントアウトしたらどうなりますか?

rb

1# frozen_string_literal: true 2 3Kaminari.configure do |config| 4 config.default_per_page = 8 5 config.max_per_page = nil 6 config.window = 3 #ここをコメントアウト 7 config.outer_window = 1 #ここをコメントアウト 8 # config.left = 0 9 # config.right = 0 10 # config.page_method_name = :page 11 # config.param_name = :page 12 # config.max_pages = nil 13 # config.params_on_first_page = false 14end

投稿2020/12/08 08:18

FKM

総合スコア3647

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/08 09:14

FKM様 ご質問ありがとうございます。 頂いた内容の箇所をコメントアウトしても変化ありませんでした...。
FKM

2020/12/10 01:05 編集

その後 rails sコマンドで再起動しましたでしょうか。 【Rails】kaminariを使用してページネーション機能を実装https://qiita.com/ryota21/items/29fa282745afb1474059
退会済みユーザー

退会済みユーザー

2020/12/09 11:56

rails sで再起動しているのですが、変化ありませんでした...。
guest

0

ベストアンサー

記事を参考に

とありますが、できる限り公式を見る癖をつけた方がいろいろ捗ると思います。


テンプレートを使わず、デフォルトの状態で下記のような形になります。
あとはレイアウトを整えて、日本語化して、FirstとLastを削除すれば良いかと思います。

Ruby

1<%= paginate @admins, window: 1, outer_window: 1 %>

イメージ説明
※firstとlastの削除方法が見つからなかったのですが、こだわりがなければcssで消すのもありかと思います。


追記です。
1ページ目を表示すると下記のような形になるので、条件分岐をして、outerを増減したものを呼び出すなどの工夫が必要そうです。
イメージ説明


さらに追記です。

前提:gemをインストールした状態(kaminariのconfigは設定せず、paginatorのカスタマイズはなし)
下記のコードでほぼ実現できます。(本当はelseとかきちんと書いた方が良い)
https://kaminari-test.herokuapp.com/

Ruby

1<% 2 n = 1 3 n = 3 if @pages.current_page == 1 || @pages.current_page == @pages.total_pages 4 n = 2 if @pages.current_page == 2 || @pages.current_page == @pages.total_pages - 1 5%> 6<%= paginate @pages, window: n, outer_window: 1 %>

ほぼというのは、4ページを表示した際に、Prev 1 2 3 4 5 ... 25 Nextになってしまいます。(※22ページも同じ)
2文字以上飛ばす場合は...になるが、1文字飛ばす場合は...にならないkaminariの仕様みたいです。

投稿2020/12/08 05:54

編集2020/12/08 10:14
no1knows

総合スコア3365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/08 06:13

no1knows様 ご回答頂きありがとうございます! > できる限り公式を見る癖をつけた方がいろいろ捗ると思います。 ご指摘頂きありがとうございます。 公式を見る癖がありませんでしたので、今後はまず公式を見るようにします。 また、頂いたコードで試してみたのですが、反映されませんでした...。 その他にconfigファイルのwindowとouter_windowも変更してみたのですが、反映されませんでした。 ローカルサーバーの再起動も行いました。 公式を見て、色々試してみたいと思います。
no1knows

2020/12/08 06:17

お力になれず申し訳ないです。 ちなみに > 反映されない というのは、例えばconfigの内容を変更してもそれが反映されないということでしょうか?
no1knows

2020/12/08 06:29

あとpaginatorを出しているのは、デフォルトから変更しているのでしょうか? デフォルトのままで、下記で実装できそうな感じですけど、無理なのかな・・・ <%= link_to_prev_page @admins, 'previous' %>+上記のコード+<%= link_to_next_page @admins, 'next' %>
退会済みユーザー

退会済みユーザー

2020/12/08 07:09

no1knows様 > お力になれず申し訳ないです。 とんでもないです! > ちなみに > 反映されない というのは、例えばconfigの内容を変更してもそれが反映されないということでしょうか? こちらに関しましては、上記の認識でお間違いございません。 > あとpaginatorを出しているのは、デフォルトから変更しているのでしょうか? こちらは、部分テンプレートのfirstとlastの削除で若干の変更はしております。 頂いたコードを試してみたのですが、思い通りの表示にはなりませんでした...。 また、追記で頂いている内容が行いたいカスタマイズなので、もう一度コードを見直して試してみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問