31

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

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>
4

3 に答える 3

47

試してみてください:

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

その後:

<%= paginate @posts %>
于 2012-06-26T03:31:14.423 に答える
22

カミナリでページネーションエラーが発生した場合

未定義のメソッド「total_pages」

また

未定義のメソッド「current_page」

渡した AR スコープにメソッドが呼び出されpaginateていない可能性があります。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) %>
于 2015-04-30T06:10:54.833 に答える
3

少し前に、アクションごとに異なる変数名を使用して解決したカミナリに少し問題がありました。

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

これは私のために働いた。

お願いします。

于 2012-06-26T03:40:26.443 に答える