动态保存Rails中的分数排名

时间:2016-02-19 05:16:13

标签: mysql ruby-on-rails

Rails的新手,我想澄清一下如何动态更新数据库中的内容。

具体来说,我现在正在制作一个测验项目。 Javascript测验检查服务器端的每个答案,然后添加总点数(所以6个正确答案,用户在score列中有6个)。

然后我会显示一个记分牌以“排名”用户。问题是,我并没有真正“排名”它们 - 不是以后我可以返回Quiz表并看到一个用户完成#1,另一个完成#2等等。相反,我是按总分组织score个结果。因此,用户可以根据用户列出的位置查看排名,但不会存储。

这就是我现在正在做的事情。

在记分牌控制器中,我将所有测验结果的表格过滤为与当前测验匹配的分数(由:category确定)。

def index
 @quizzes = Quiz.where(finished: true, category: session[:category]).order(score: :desc)
end

在视图中,我展示了Quiz组织的score结果。

 <% @quizzes.each do |Quiz| %>
   <tr>
     <td></td>
     <td><%= quiz.user.username %></td>
     <td><%= quiz.user.city %></td>
     <td><%= quiz.category %></td>
     <td><%= quiz.score %></td>
   <% end %>
 </tr>

所以输出是一个得分表(7,6,5 ..)。

如果我为rank添加了一列,是否可以创建一个匹配游戏结束位置的整数值?目前,游戏知道通过匹配:category模型中的Quiz来向相应用户插入分数。该表是否可以为匹配该类别的所有结果动态存储“排名”?

1 个答案:

答案 0 :(得分:0)

您真的想将rank存储在数据库中,还是只想渲染它?如果您只是想渲染它,那么您可以使用.each_with_index方法而不是.each并动态渲染它。

但是如果你想存储在DB中(这对我来说很奇怪),那么你就可以编写一小段代码来迭代该类别的测验并更新每个人的排名。实际上你要使用像Sidekiq或Delayed Job这样的后台处理库。因此,一旦控制器收到测验提交呼叫,它就会更新分数并将等级更新部分移交给后台工作。