【发布时间】:2014-03-30 23:02:24
【问题描述】:
在我的 rails 应用中,对于每个用户,我都是这样计算他们的分数的:
<% comment_vote_count = @user.comments.map{|c| c.votes.count}.sum
comment_vote_count ||=0
comment_vote_count *= 2
final_score = comment_vote_count + @user.base_score %>
这只是在某些视图中呈现,并没有保存在任何地方的数据库中。
我正在尝试按最高分到最低分的顺序填充所有用户的列表,并对结果进行分页。
这就是我的控制器中的内容:
def user_list
@users = User.order("created_at DESC").paginate(:page => params[:page], :per_page => 10)
respond_to do |format|
format.html
end
end
在我的用户列表视图中
<ol>
<%= render (@users) %>
</ol>
<%= will_paginate @users, :next_label => “next” , :previous_label => '', :class => "next_pagination" %>
如何根据分数呈现有序的用户列表?我应该将分数存储在数据库中吗?
【问题讨论】:
-
这只是分配给每个用户的基本分数。这是存储在数据库中
-
@Katie H 首先你不应该在视图中编写业务逻辑。现在对于您的问题,您有业务逻辑来获取单个用户的投票计数,在用户模型中对所有用户使用相同的逻辑。迭代所有用户,使用相同的逻辑来获得投票计数,将他们推入一个数组并按照您选择的顺序进行排序。
-
我该怎么做?如果我有成千上万的用户怎么办?我应该遍历所有这些吗??
-
magnum2002 提出的@KatieH 方法将更快地返回用户集合。
标签: ruby-on-rails ruby ruby-on-rails-4