我有一个Mongoid Rails模型,HighScores。 有几条记录,例如:
time: 12; name: Peter
time: 19; name: Ben
time: 16; name: Idokn
time: 8; name: Jan
time: 15; name: Adam
我想对此列表进行排序,并将其限制为仅按time
升序排序的前三个记录。
但我还需要为每个返回的记录附加rank
,以便输出显示如下内容:
time: 8; name: Jan; rank: 1
time: 12; name: Peter; rank: 2
time: 15; name: Adam; rank: 3
这是一个API,因此排名应该是一个属性。
答案 0 :(得分:0)
试试这个:
在您的控制器中:
@top_three = HighScores.order('time ASC').first(3)
这将为您提供按升序时间排序的前3个HighScores。
然后在您的视图中(假设您的观点使用erb):
<% @top_three.each_with_index do |score, index| %>
<%= "time: #{score.time}; name: #{score.name}; rank: #{index + 1}" %>
<% end %>
each_with_index
允许您引用列表中项目的索引。索引从0开始,因此您需要为每次迭代添加1以正确标记ranks
。
<强>更新强>
您更新了以下问题:“这是一个API,因此排名应该是一个属性。”
top_three = HighScores.order('time ASC').first(3)
top_three.each_with_index do |score, index|
score.rank = index + 1
score.save!
end
您的前三个分数将保存其等级值。
答案 1 :(得分:0)
尝试Model.all.limit(3).asc
或/并使用pluck(:field)
文件: