我有一个rails应用程序,我正在尝试为Essays类的视图设置分页。我是rails的新手...所以我可以为所有人做这个,但我只想让某些人在这个列表中(所有的论文都包含在Essay.find(Ranking.where(:user_id=>current_user.id).essay_id)
中)。
home.html.erb包含(除其他外):
`<%= will_paginate @essays%>
<ul class="users">
<%= render @essays %>
</ul>
<%= will_paginate @essays%>`
页面控制器中的:
def home
#...
@essays = Essay.paginate(:page => params[:page])
end
我尝试在@essays=Essay.find(Ranking.where(:user_id=>current_user.id).essay_id)
之前添加@essays=Essay.paginate(:page => params[:page])
,但此处不提供排名类的方法essay_id
。我该如何解决这个问题?谢谢!
答案 0 :(得分:2)
这应该有效:
Essay.joins(:rankings)
.where(:rankings => {:user_id => current_user.id})
.paginate(:page => params[:page])
答案 1 :(得分:0)
虽然可以使用will_paginate完成此操作。我对Rails 3的这个插件有一些问题。在我看来,更顺畅的解决方案是使用另一个名为Kaminari的分页插件。
假设,essay_id作为参数传递,您可以尝试:
@ranking = Ranking.where(:user_id => current_user.id, :essay_id => params[:essay_id]).page(params[:page]).per(10)
或者取决于你的逻辑。如果已在控制器中识别出论文对象:
@essay = Essay.find(1234)
@ranking = Ranking.where(:user_id => current_user.id, :essay_id => @essay.id).page(params[:page]).per(10)
然后,在你看来:
<%= paginate @ranking %>
更好的是,为了让您开始使用Kaminari,您可以查看此rails cast。正如轨道演员所说:
分页中的首选宝石 Rails是will_paginate,但是 目前发布的版本没有 支持Rails 3.有一个 预发布版本可用 有效,但尚未更新 数月。如果will_paginate不是 那里有更长时间的积极发展 我们可以使用的任何其他宝石?
另一种选择是Kaminari。这个 似乎提供了一个更清洁 实施分页和 提供了一些改进的功能, 所以让我们在我们的应用程序中尝试它 代替。
希望有所帮助!
答案 2 :(得分:-1)
在paginate
方法之后简单地链接find
方法:
@essays=Essay.find(Ranking.where(:user_id=>current_user.id).essay_id).paginate(:page => params[:page])