私は検索して検索しましたが、私の問題は何も解決しませんでした。これが私のコントローラーです:
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>
試してみてください:
def show
@topic = Topic.find(params[:id])
@posts = @topic.posts.page(params[:page]).per(2)
end
その後:
<%= paginate @posts %>
雷鳴のようなページネーションエラーが発生した場合
未定義のメソッド `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) %>
少し前に、私は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
これでうまくいきました。
ショットしてください。