web-dev-qa-db-ja.com

カミナリ&Railsページネーション-未定義のメソッド `current_page '

私は検索して検索しましたが、私の問題は何も解決しませんでした。これが私のコントローラーです:

def show
    @topic = Topic.find(params[:id])
    @topic.posts = @topic.posts.page(params[:page]).per(2) # 2 for debugging
end

トピックビューが2つの投稿に縮小されるため、これは問題なく機能します。しかし、これをshow.html.erbに追加すると:

<%= paginate @topic.posts %>

このエラーが発生しました:

undefined method `current_page' for #<ActiveRecord::Relation:0x69041c9b2d58>
31
time

試してみてください:

def show
  @topic = Topic.find(params[:id])
  @posts = @topic.posts.page(params[:page]).per(2)
end

その後:

<%= paginate @posts %>
47
Nicolas Garnil

雷鳴のようなページネーションエラーが発生した場合

未定義のメソッド `total_pages '

または

未定義のメソッド `current_page '

paginateに渡したARスコープでpageメソッドが呼び出されていない可能性があります。

pageに渡すスコープで常にpaginateを呼び出すようにしてください。

これは、Kaminari.paginate_arrayを使用して装飾した配列がある場合にも当てはまります。

悪い:

<% scope = Article.all    # You forgot to call page :(  %>
<%= paginate(scope)       # Undefined methods...        %>

良い:

<% scope = Article.all.page(params[:page]) %>
<%= paginate(scope) %>

または、独自の非AR配列を使用して...

悪い:

<% data = Kaminari.paginate_array(my_array)   # You forgot to call page :(        %>
<%= paginate(data)                            # Undefined methods...     %>

繰り返しますが、これは良いことです:

<% data = Kaminari.paginate_array(my_array).page(params[:page]) %>
<%= paginate(data) %>
21
Darren Hicks

少し前に、私はkaminariで少し問題がありましたが、アクションごとに異なる変数名を使用することで解決しました。

indexアクションで次のように呼び出すとしましょう:

def index
  @topic = Topic.all.page(params[:page])
end

indexビューは<%= paginate @topic %>で正常に機能しますが、他のアクションで同じ変数名を使用したい場合は、そのようなエラーが発生します。

def list
  # don't use @topic again. choose any other variable name here
  @topic_list = Topic.where(...).page(params[:page])
end

これでうまくいきました。

ショットしてください。

3
Kleber S.