У меня есть фильтр 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, который также отменяет изменения, которые я внес в пользовательскую модель.
Какой правильный шаблон для этого? В частности: запуск проверки каждый раз при создании объекта и возможность редактирования другой модели в случае неудачной проверки.