【问题标题】:Calculating average for a row in one record with rails使用rails计算一条记录中一行的平均值
【发布时间】:2017-09-27 05:25:07
【问题描述】:
我有一个有 4 列的表格,“第一、第二、第三和平均”。它们是每个用户在 3 次尝试中的得分,然后计算 3 次尝试的平均分数,并将计算结果输入“平均”列。由于用户可以在客户端关闭 javascript,我如何在服务器端使用 rails 实现这一点?
提前感谢您的帮助!
(rails 5.0.1.0, postgresql 9.5, ruby 2.3)
【问题讨论】:
标签:
ruby-on-rails
ruby
postgresql
【解决方案1】:
根据我从您的问题中了解到的情况,在我看来,您不能等待用户完成发送它们的尝试,我建议并且用户开始尝试在该表中创建一个带有 ID 的记录跟踪用户在每次尝试后“尝试”通过休息服务发送带有尝试 ID 的每次尝试的结果并将其添加到现有记录中,一旦他完成最后一次尝试,您可以轻松计算平均值,如果用户在任何给定时刻关闭 JS,您的数据库中有一个用户尝试的现有实例,您可以从那里采取行动。如果有什么我不明白的,请告诉我。
【解决方案2】:
假设您需要存储它,只需在最终提交时计算:
params[:average] = (params[:first].to_i + params[:second].to_i + params[:third].to_i)/3.0
如果你只是计算它没问题,你可以在 sql 中使用类似的东西:
select id, (select avg(c) from (values(first),(second),(third)) table(c)) as average from table;
但最好避免这种情况并在更新时将其存储。