質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

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

ページネーション

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

Q&A

解決済

2回答

3427閲覧

ページネーションのカスタマイズ

s.k

総合スコア423

Ruby on Rails

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

ページネーション

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

0グッド

0クリップ

投稿2017/04/30 06:30

編集2017/05/01 05:36

###前提・実現したいこと
モデルから特定のデータを取り出しページネーションを対応させたいです。

###発生している問題・エラーメッセージ

以下のページネーションだと

@pro_mics = Micropost.where(purpose: 1).page(params[:page])

実際に機能するのは下記の機能になってしまいます。

@microposts = Micropost.page(params[:page])

###該当するコード

【pages_controller.rb】

def index @contact = Contact.new if user_signed_in? @microposts = Micropost.page(params[:page])★★★ @pro_mics = Micropost.where(purpose: 1).page(params[:page]) ※ = ★★★になってしまいます。 @pre_mics = Micropost.where(purpose: 2).first(20) @clip_mics = current_user.clip_microposts @rank_mics = Micropost.all.sort_by{|ms|ms.rank}.reverse.first(20) @q = Micropost.search(params[:q]) @activities = PublicActivity::Activity.all.sort_by{|ms|ms.created_at}.reverse end @q = Micropost.search(params[:q]) end

【pages/index.html.erb】

<div class="tab-pane fade in active" id="home2"> <%= render 'pages/array', microposts: @microposts %><!-- 新着 --> <div class="t_a_c"><%= paginate @microposts %></div>★★ </div> <div class="tab-pane fade" id="prof2"> <%= render 'pages/if_array', microposts: @pro_mics, type: 1 %><!-- プロトタイプ --> <div class="t_a_c"><%= paginate @pro_mics %></div>★★と同じページネーションになります。 </div>

【ページネーションに使っているgem】

gem 'kaminari' gem 'kaminari-bootstrap' ↓↓↓↓詳細 kaminari (1.0.1) kaminari-actionview (1.0.1) kaminari-activerecord (1.0.1) kaminari-bootstrap (3.0.1) kaminari-core (1.0.1)

ご経験ある方、ご助言お願いします。

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

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

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

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

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

moke

2017/05/01 04:27

毎度言っていますが、最低でも、controllerとviewを晒していただかないと…あとページネーションに使っているgem。回答者に、過去の質問をみて、推測する義理はありませんからね
s.k

2017/05/01 05:36

mokeさん、失礼しました!
guest

回答2

0

kaminariはページネーションにurlしか指定できません。
urlは@pro_micsから自動推察しますが、この場合、同じURLになります。

別のコントローラー(常に@pro_micsを返す)を作ってそこに誘導するか
ransackのparams[:q]を使いましょう。

ruby

1 <div class="tab-pane fade" id="prof2"> 2 <%= render 'pages/if_array', microposts: @pro_mics, type: 1 %><!-- プロトタイプ --> 3 <div class="t_a_c"><%= paginate @q %></div>qの検索結果と同じページネーションになります。 4 </div>

投稿2017/05/01 05:55

moke

総合スコア2241

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

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

s.k

2017/05/01 06:39

mokeさん、ありがとうございます! @pro_micsはMicropostのpurposeカラムが1のもの全てを集めた変数になってます。その場合、検索結果qだとページが当てはまらないのです泣。@pro_micsのページネーション専用変数を用意し、その変数の中でparams[~]とし、<%= paginate 変数 %>とすればいいんでしょうか?
moke

2017/05/01 06:45

そうですね @a = Micropost.search(params[:a]||{purpose_eq: 1}) @pro_mics = @a.result.page(params[:page]) <%= paginate @a %> でやってみてください
s.k

2017/05/01 07:17

<%= paginate @a %>でundefined method `total_pages' for というエラーが出てしまいます。。。
moke

2017/05/01 07:24 編集

@a = Micropost.search(params[:a]||{purpose_eq: 1}).result がnilなんじゃないですか? そろそろ、魔法の言葉ggrが出そうです。
s.k

2017/05/01 07:31

nilでした! フォームでデータを送ってないからでした。 bootstrapの複数タブを使ってますのでできれば一ページに全ての変数を収めたいのでggrもやってみます!
moke

2017/05/01 07:42

※ggr(gugure=ググれ)ですgem名ではないのでお間違えないよう。 頑張ってください
s.k

2017/05/01 07:44

ちゃんと読み取りました!笑
guest

0

自己解決

viewのページネーションにキーを追加し、そのキーをコントローラで受け取ることで解決できました。

参考

【view】

<div class="t_a_c"><%= paginate @pro_mics, :param_name => 'vip_page' %></div>

【controller】

def index ・・・省略・・・ @pro_mics = Micropost.where(purpose: 1).page(params[:vip_page]) ・・・省略・・・ end

投稿2017/05/01 07:43

s.k

総合スコア423

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問