使用rails显示视图中的对象排名计数

时间:2015-08-31 04:11:18

标签: ruby-on-rails pagination

我有一个显示电影列表的页面。电影由用户投票,按照投票次数排列。我也使用分页,所以每15部电影分开。我需要在每部电影下放置一个基本的排名字段。

电影名称 排名#1

电影名称 排名#2

电影名称 排名#3

我无法想到最好的方法。我试图使用每个索引,只显示索引,但分页打破了这一点。每次将分页移动到下一组时,计数都会开始。

有没有人对我如何做到这一点有任何想法?

提前致谢。

很抱歉没有首先发布代码。我用索引的想法取消了每个,因为它没有像我预期的那样工作。我开始在电影课上制作一种排名方法,这仍然会产生奇怪的结果。

** movie.rb
  

def rank
    Movie.all.order(vote_count :: desc)
  结束

** index.html.erb

<%= @ movie.rank%>


当我打电话给它时会增加一个等级,但如果2部电影的票数相同,则排名仍然无序。

我也为我糟糕的堆栈溢出礼仪道歉。我将审查指南,并在将来做得更好。

2 个答案:

答案 0 :(得分:2)

控制器:

-@movies.each_with_index do |movie, i|
  =movie.name
  %span Ranked Number #{@page-1 * per_page + i}

视图:

LIMIT 40, 10

<强>解释 在Controller内部,您使用page参数(或默认值1)对您的集合进行分页。 paginate插件正在为SQL-Query添加一个Limit。假设你有100个结果,你只需要第5页(假设每个页面是10个条目),那么你只需要10个条目,从40号开始。 在SQL中看起来(5-1) * 10

如果你有你的设置,你进入视图并渲染它们。使用Page-1 * Per_Page + current_index计算排名。当前索引从0开始,以n-1结束。

让我们假设你选择40,所以页面是5.这意味着 function calculatebmi() { validate(); var weight=+document.bmiform1.weight.value; var feet=+document.bmiform.feet.value; var inches=+document.bmiform.inches.value; inches=12*feet+inches; var height=x*inches; var finalbmi=weight/(height*height); document.bmiform3.bmi.value=finalbmi; } 是偏移量,在这种情况下为40.然后它添加索引0,1,2所以它的即将到来的40,41,42 ,43 ....

希望有所帮助

答案 1 :(得分:0)

你可以写一个范围来计算投票数。

类似的东西:

Vote.count # SELECT count(*) AS count_all FROM "votes"
Movie.vote.count # SELECT count(*) AS count_all FROM "votes" WHERE ....