Rails分类的子集

时间:2011-05-31 07:27:02

标签: ruby-on-rails ruby-on-rails-3

我有一个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。我该如何解决这个问题?谢谢!

3 个答案:

答案 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])