【发布时间】:2011-11-22 09:20:26
【问题描述】:
在一个用户拥有许多 cmets 的简单 mongoid 数据模型上,我想在用户写下至少 1 条评论时奖励他一个特定的徽章。所以我设置了一个这样的观察者:
class CommentBadgeObserver < Mongoid::Observer
observe :comment
def after_create(comment)
CommentBadge.check_conditions_for(comment.user)
end
end
class CommentBadge < Badge
def self.check_conditions_for(user)
if user.comments.size > 1
badge = CommentBadge.create(:title => "Comment badge")
user.award(badge)
end
end
end
user.award 方法:
def award(badge)
self.badges << badge
self.save
end
下面的测试失败(但我猜这是正常的,因为观察者是在后台执行的?)
it 'should award the user with comment badge' do
@comment = Factory(:comment, :user => @user)
@user.badges.count.should == 1
@user.badges[0].title.should == "Comment badge"
end
验证此行为的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby rspec mongoid observer-pattern