我想实施徽章系统;用户在做“提问”,“投票”等事情时获得徽章......
但是,我正在寻找一种解决方案来定义授予徽章的条件。一种解决方案是我使用观察者模型来触发徽章。但是我会使用一种更优雅的方式来定义徽章将被授予的条件,而不是在观察者模型中定义它。
示例:
用户询问了五个问题,每个问题的评分至少为五。在代码中,我将定义一个条件:
user.questions.keep_if{|q| q.rating >= 5 }.size >= 5
但我想在徽章模型对象中定义这个条件。你知道什么是好方法吗?
我知道merit badge gem;它不适合我的应用程序,否则我现在就会使用它。
我希望你能帮助我。
答案 0 :(得分:2)
使用before_save回调将允许您定义一个包含上述单行的方法,并在每次将用户保存到数据库时对其进行测试