我搜索和搜索,但没有解决我的问题。这是我的控制器:
def show
@topic = Topic.find(params[:id])
@topic.posts = @topic.posts.page(params[:page]).per(2) # 2 for debugging
end
功能很好,因为主题视图减少到两个帖子。但是,当我将此添加到show.html.erb:
时<%= paginate @topic.posts %>
我收到了这个错误:
undefined method `current_page' for #<ActiveRecord::Relation:0x69041c9b2d58>
答案 0 :(得分:47)
尝试:
def show
@topic = Topic.find(params[:id])
@posts = @topic.posts.page(params[:page]).per(2)
end
然后:
<%= paginate @posts %>
答案 1 :(得分:21)
如果您在Kaminari中遇到分页错误,请
未定义的方法`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) %>
答案 2 :(得分:3)
前段时间,我对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
这对我有用。
拜托,试一试。