我有一个before_create
过滤器来检查人们是否发布了太多评论。
如果他们是,我想标记他们的帐户。
class Comment < ActiveRecord::Base
before_create :check_rate_limit
def check_rate_limit
comments_in_last_minute = self.user.comments.count(:conditions => ["comments.created_at > ?", 1.minute.ago])
if comments_in_last_minute > 2
user.update_attribute :status, "suspended"
return false
end
true
end
end
before 过滤器返回 false 以停止创建评论。问题是这会触发 ROLLBACK,它也会撤消我对用户模型所做的更改。
完成此操作的正确模式是什么?具体来说:每次创建对象时运行检查,如果检查失败,则能够编辑另一个模型。