Rails请求当前位置

时间:2014-01-09 12:14:24

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

我有一个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,因此排名应该是一个属性。

2 个答案:

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

文件:

  1. http://mongoid.org/en/mongoid/docs/querying.html
  2. http://two.mongoid.org/docs/querying/criteria.html