对 Active Record Reputation gem 感到沮丧,我发现它非常有问题,我正在尝试为 Rails 应用程序创建自己的信誉系统。这是非常原始的。我创建了一个带有 user_id 和 value 字段的 Contribution 资源,并在 User.rb 和 Contribution.rb 之间建立了关联。每次用户以某种方式为应用程序做出贡献时,他们都会获得一些积分。如果他们提出问题,这些行将包含在 Questions 控制器的创建操作中。
@contribution = current_user.contributions.build({:value => 3})
@contribution.save
如果用户在网站上编辑了一些标签,我会做同样的事情来奖励超级用户的管理工作
@contribution = current_user.contributions.build({:value => 2})
@contribution.save
然后,计算用户的总声誉变得非常容易。
这样做的一个问题是,在一个用户关心这个应用程序及其声誉的想象世界中,很容易玩弄这个系统。例如,用户可以不断更新类别或标签,每次更新都会获得 2 分。因此,我想以某种方式记录用户做了什么类型的操作。
现在,所有用户可以获得积分的工作都以某种方式与 Question.rb 相关联,但是,他们通过更新标签、更新类别、支持其他人的答案等获得积分,因此仅将 question_id 存储在贡献模型中不会不够。
根据我告诉你的内容,你能告诉我如何构建贡献资源以完成我想要的吗?
例如,我想到了一种方法,它会在我的数据库中留下很多空字段,所以我认为这不是一个好方法。我可以添加一个question_id
和几个布尔字段,例如 'answering_question' ' updating_category
' updating_tags
' ,并且每次执行操作时,使用“true”记录是否正在执行例如“updating_category”。但是,如前所述,如果我开始奖励许多不同类型的贡献,那么每一行中都会有很多列没有被使用。
我不确定这是否是一个“真正的问题”(我已经阅读过它,但不确定避免它的必要性),或者是否有更好的方法来记录每个用户参与的活动类型以获得积分.
目前的一些协会
User has_many :answers
Question.rb has_many :categories
Question.rb has_many :tags