いつもお世話になっております。
タイトル通りなのですが、controller側でモデルの検索結果をクエリパラメータの条件により絞り込み、view側にモデルを渡しそれを表示しています。
表示はページングgemであるkaminariを使用しており、「もっと見る」を押すと5件ずつ表示されていきます。
ごちゃごちゃと処理をしてしまっていますが、最終的に@itemsはActiveRecord形式であり、実際に表示させたいデータとなります。
モデル全体が30行あり、コントローラーで10件に絞り込んだ場合、最初の表示で5件、「もっと見る」を押すと絞り込んだ残りの5件が表示されることを想定しているのですが、現状のままだともっと見るを押した際に、全体の30件のデータから2ページ目の5つ分のレコードを取ってきてしまいます。
javascript内でpryで止めてみると、「もっと見る」が押された場合にクエリパラメータにはpage=2の情報しか渡されていませんでした。
kaminariの自動生リンクである↓
<%= link_to_next_page @items, 'もっと見る', remote: true, id: 'more_link' %>
に、検索などのパラメータを渡すにはどのようにすればよいのでしょうか。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。
環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1
# xxxx.controller.rb def show @items_tmp = [] if !params[:jouken1].nil? # 絞り込み処理 User.where(xxx: yyyy) など end if !params[:jouken2].nil? # 絞り込み処理 User.where(xxx: yyyy) など end ・ ・ ・ # 配列をActivereecordに戻す @items = @items_tmp .first.class.where(id: arr.map(&:id)).page(params[:page]).per(5).order(created_at: "DESC") render "xxxxx/show" end # show.html.erb <%= render 'items' %> <%= link_to_next_page @items, 'もっと見る', remote: true, id: 'more_link' %> # _items.html.erb <% @items.each do |item| %> <% item.id %> <% item.name %> ・ ・ ・ <% end %> # show.js.erb $('#items').append("<%= escape_javascript(render 'items', object: @items) %>"); $("#more_link").replaceWith("<%= escape_javascript(link_to_next_page(@items, 'もっと見る', remote: true, id: 'more_link')) %>"); <%# binding.pry %>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。