如何在ActiveRecord对象中定义触发条件?

时间:2013-12-17 17:23:02

标签: ruby-on-rails ruby activerecord model badge

我想实施徽章系统;用户在做“提问”,“投票”等事情时获得徽章......

但是,我正在寻找一种解决方案来定义授予徽章的条件。一种解决方案是我使用观察者模型来触发徽章。但是我会使用一种更优雅的方式来定义徽章将被授予的条件,而不是在观察者模型中定义它。

示例:

用户询问了五个问题,每个问题的评分至少为五。在代码中,我将定义一个条件:

user.questions.keep_if{|q| q.rating >= 5 }.size >= 5

但我想在徽章模型对象中定义这个条件。你知道什么是好方法吗?

我知道merit badge gem;它不适合我的应用程序,否则我现在就会使用它。

我希望你能帮助我。

1 个答案:

答案 0 :(得分:2)

我会调查ActiveRecord callbacks

使用before_save回调将允许您定义一个包含上述单行的方法,并在每次将用户保存到数据库时对其进行测试