Rails:每周跟踪点数

时间:2013-12-16 12:43:17

标签: ruby-on-rails ruby gem points

在我目前的应用程序中,我需要能够每周跟踪点数,以便用户每周重置为零点。我计划使用宝石优点:https://github.com/tute/merit来跟踪积分。

在我的用户个人资料中,我有一个存储积分的字段。我无法找到的是我如何在自动基础上为所有用户清除此字段。

我遇到了一些信息Rails reset single column我认为这可能是每个星期天在规定的时间重置它的答案 - 但我不确定这最后一部分以及代码将去哪里(型号或控制器)

此外,如果他们是更好的方法,欢迎任何建议。

2 个答案:

答案 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周的时间段(如果您决定需要所有时间,年度等,则可以查询不同的时段),并且您不会丢失历史数据。