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
来向相应用户插入分数。该表是否可以为匹配该类别的所有结果动态存储“排名”?
答案 0 :(得分:0)
您真的想将rank
存储在数据库中,还是只想渲染它?如果您只是想渲染它,那么您可以使用.each_with_index
方法而不是.each
并动态渲染它。
但是如果你想存储在DB中(这对我来说很奇怪),那么你就可以编写一小段代码来迭代该类别的测验并更新每个人的排名。实际上你要使用像Sidekiq或Delayed Job这样的后台处理库。因此,一旦控制器收到测验提交呼叫,它就会更新分数并将等级更新部分移交给后台工作。