如何避免数据库中的空字段

时间:2013-04-29 00:33:42

标签: ruby-on-rails

对于我发现非常错误的Active Record Reputation gem感到沮丧,我正在尝试为Rails应用程序创建自己的声誉系统。这很原始。我创建了一个带有user_id和value字段的Contribution资源,以及User.rb和Contribution.rb之间的关联。每当用户以某种方式为应用程序做出贡献时,他们就会获得一些积分。如果他们提出问题,这些行将包含在问题控制器的创建操作中。

 @contribution = current_user.contributions.build({:value => 3})
 @contribution.save

如果用户在网站上编辑了一些标签,我会做同样的事情来奖励超级用户的行政工作

 @contribution = current_user.contributions.build({:value => 2})
 @contribution.save

然后,计算用户的总声誉变得非常容易。

这样做的一个问题是,在用户关心这个应用程序及其声誉的想象世界中,游戏系统非常容易。例如,用户可以继续更新类别或标签,每次他们这样做,他们再获得2分。因此,我想以某种方式记录用户做了什么类型的操作。

现在,用户可以获得积分的所有工作都以某种方式与Question.rb相关联,然而,他们获得了更新标签,更新类别,提升其他人的答案等的积分,因此仅将问题存储在贡献中模型是不够的。

根据我告诉你的内容,您能否告诉我如何构建Contributions资源以实现我想要的目标?

例如,我想到了一种方法,它会在我的数据库中留下很多空字段,所以我认为这不是一个好方法。我可以添加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

1 个答案:

答案 0 :(得分:1)

对于我的rails应用程序我使用的是thumps_up gem,它比active_record_reputations_system更好,它更简单。

https://github.com/bouchard/thumbs_up