我很难尝试在我的Ruby on Rails应用程序中实现一个成就系统.
我有很多我想要检查的成就.所有都是由各种控制器中的一些创建动作触发的.
我有一个想法,我将有一个成就模型,其中包括控制器和它响应的动作.然后为创建过滤器,检查适用的成就.在实际定义/执行成就时,我会陷入困境.每项成就可能需要不同的数据.例如,人们想要知道用户已经回答了多少问题,另一个问题是他们做出了多少评论,以及第三个用户邀请了多少人回答了问题.
实际上只需将所有必要的ruby代码直接嵌入到DB中,这是最好的做法吗?我可以看到做一个自包含块来执行所有活动记录查找等,并返回true/false,尽管我们仍然存在一些关于事先知道什么是设置的问题(即current_user等).
任何合理的最佳做法都不会让我感到肮脏?我可以看到一个完整的策略/规则引擎是一条路径,虽然这可能会吓到我而不是计划一个.
谢谢!奥伦
我在我的产品中做了一些静力学计算.用户已经执行了许多操作,比方说发布了评论.我希望能够向他们展示他们在过去一个月或过去一年中每个月每周发布的评论数量.
有没有办法用activerecord这种方式分组?我最好只是手动执行此操作 - 根据我自己的标准迭代记录总结?
class User < ActiveRecord::Base
has_many :comments
end
class Comments < ActiveRecord::Base
belongs_to :user
end
@user.comments(:all).map {|c| ...do my calculations here...}
Run Code Online (Sandbox Code Playgroud)
或者有更好的方法吗?
谢谢!奥伦
我试图弄清楚我的用户的一些滑动窗口统计信息.我有一个包含用户的表,以及created_at和verified_at等列.对于每个月,我想知道有多少用户注册了(由created_at的date_trunc创建的一个简单组),然后是那些人,在我的滑动窗口中验证了多少(称为60天).
我想做一个SQL查询,给我一些像:
Month | Registered | Verified in 60 days
Jan 2009 | 1543 | 107
Feb 2009 | 2000 | 250
Run Code Online (Sandbox Code Playgroud)
我正在使用postgresql.我开始看sum(case ...),但我不知道我是否可以让我的情况以某种方式依赖于date_trunc.
当然,这不起作用,但这里的想法是:
SELECT DATE_TRUNC('month', created_at) as month,
COUNT(*) as registered,
SUM(CASE WHEN verified_at < month+60 THEN 1 ELSE 0 END) as verified
FROM users
GROUP BY DATE_TRUNC('month', created_at)
Run Code Online (Sandbox Code Playgroud)