web-dev-qa-db-ja.com

カミナリ未定義メソッド `total_pages '

カミナリ使用中にエラーが発生しました。

Gemfile:

_# gem 'will_paginate', '~> 3.0.6'
# gem 'will_paginate-bootstrap'

gem 'kaminari'
_

lists_controller.rb

_  def index
    if params[:tag]
      @lists = List.tagged_with(params[:tag]).order(created_at: :desc).paginate(page:params[:page], per_page: 3 )
    else
      @lists = List.all.order(created_at: :desc)
    end
  end
_

私もユーザー.page params[:page].per(2)フォロー.order(created_at: :desc)ですが、機能しません

ビュー/リスト/index.html.erb

_<%= paginate @lists %>
_

エラーはここにあります

_undefined method `total_pages' for #<List::ActiveRecord_Relation:0x007fa2303e3fa8>
Extracted source (around line #26):             
    </div>
  </div>
<%= paginate @lists %>
  <div class="container"> 
    <div class="row">
      <div class="col-md-8">
_

カミナリについてのレールキャストのビデオをフォローしていましたが、エラーはありませんでした。

9
dongdongxiao

両方のクエリをページ分割する必要があります。私は次のようなものをお勧めします:

def index
  if params[:tag]
    @lists = List.tagged_with(params[:tag])
  else
    @lists = List.all
  end
  @lists = @lists.order(created_at: :desc).paginate(page:params[:page], per_page: 3 )
end

それ以外の場合、@listsがnilの場合、params[:tag]はページネーションオブジェクトになりません。

8
Shelvacu

次のページ付けを試してください:

 List.tagged_with(params[:tag]).order(created_at: :desc).page(params[:page]).per(3)
1
PatNowak

同様の問題が発生しました。これは、commontator gemがwill_paginateからメソッドを取り込み、基本のActiveRecordクラスをオーバーライドしていたためです。

エラーは、両方のライブラリ間で共通のメソッド名であると思われるpage_entries_infoメソッドの呼び出しスタックにありました。

修正するには、次の方法でメソッドを明示的に参照できます。

したがって、ビューコード:

      <%= Kaminari::Helpers::HelperMethods.page_entries_info @events %>
      <%= link_to "Next", path_to_next_page(@events) %>
      <%= link_to "Prev", path_to_prev_page(@events) %>

およびイニシャライザー(initializers/kaminari_config.rb)

module Kaminari
  module Helpers
    module HelperMethods
      extend ActionView::Helpers::TranslationHelper
      module_function :page_entries_info
    end
  end
end

これは非常にハッキーな修正ですが、役立つことを願っています。

0
3DPrintScanner