在我目前的应用程序中,我需要能够每周跟踪点数,以便用户每周重置为零点。我计划使用宝石优点:https://github.com/tute/merit来跟踪积分。
在我的用户个人资料中,我有一个存储积分的字段。我无法找到的是我如何在自动基础上为所有用户清除此字段。
我遇到了一些信息Rails reset single column我认为这可能是每个星期天在规定的时间重置它的答案 - 但我不确定这最后一部分以及代码将去哪里(型号或控制器)
此外,如果他们是更好的方法,欢迎任何建议。
答案 0 :(得分:1)
您最好制作Point
模型belongs_to :user
这将允许您添加所需的任何点,然后可以根据created_at
列查询表格,以获得所需时间点的.count
如果您认为合适,我可以为您提供更多信息
<强>模型强>
我们赖以生存的一个原则是尽可能扩展我们的模型
您希望每个模型只保留 其数据,从而确保更高效的数据库调用。我对数据库不是很有经验,但我认为有很多小型模型比一个大型模型更有效
因此,在您的问题中,您希望为用户分配一些points
。 “正确”的方法是永久存储所有积分;这只能用自己的模型来完成
<强>点强>
#app/models/point.rb
Class Point < ActiveRecord::Base
belongs_to :user
end
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :points
end
点数表可能如下所示:
points
id | user_id | value | created_at | updated_at
<强>保存强>
要保存点数,您只需要在points
表中添加额外的记录。实现这一目标的最简单方法是merge
参数,如下所示:
#app/controllers/points_controller.rb
class PointsController < ApplicationController
def new
@points = Point.new
end
def create
@points = Point.new(points_params)
@points.save
end
private
def points_params
params.require(:points).permit(:value).merge(:user_id => current_user.id)
end
end
您可以通过设置value
列(我将其设置为default 1
)来定义点数的“数量”。这将是StackOverflow给出不同点数的方式;通过不同地设置value
列;)
<强>计数强>
要获得每周计数,您必须创建某种功能,以便按周拆分。像这样:
#app/models/point.rb -> THIS NEEDS MORE WORK
def self.weekly
where(:created_at => Time.now.next_week..Time.now.next_week.end_of_week)
end
该功能无法正常工作 如果你让我更多地了解你如何记录/显示每周统计数据,我会为你正确地理清这个功能。是通过cron工作还是其他什么来操作?
答案 1 :(得分:0)
根据您的描述,您可能只想跟踪用户点数和获取用户的时间。然后,您可以查询任何1周的时间段(如果您决定需要所有时间,年度等,则可以查询不同的时段),并且您不会丢失历史数据。