Question

J'ai un filtre before_create qui vérifie si les gens affichent trop de commentaires.

Si elles sont je veux signaler leur compte.

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

Les rendements avant filtre faux pour arrêter le commentaire d'être créé. Le problème est que cela déclenche un rollback qui annule également les changements que j'apportées au modèle de l'utilisateur.

Quel est le bon modèle pour y parvenir? Plus précisément:. Exécution d'une vérification chaque fois qu'un objet est créé et être capable de modifier un autre modèle si la vérification échoue

Était-ce utile?

La solution 2

Ce n'est pas une réponse idéale, mais pour l'instant je fini juste revenir vrai même lorsque le compte a été suspendu. Celui-ci de façon plus se passer, mais les futurs n'a pas.

Autres conseils

Je pense que la meilleure approche pour la limitation du débit est en file d'attente les demandes et les lire au taux maximal admissible.

Le déclencheur pour signaler l'utilisation excessive devient simplement un numéro de série de demandes dans la file d'attente.

Il a également l'avantage de ne pas un impact immédiatement sur votre base de données derrière, car il permet de déplacer le goulot d'étranglement avant la base de données dans un système de mise en file mieux contrôlable. Cela permet site hte de rester réactif même sous « attaque ».

Ces files d'attente peut être aussi simple que d'une table de hachage avec une liste chaînée. Mais il vaut mieux utiliser certains threadsafe si fifo avilable

pour moi, il semble que le retour de faux dans le rappel ne vous arrêtez pas retourner le dossier, même si elle est pas enregistré sur la base de données, bizarre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top