2010-07-02 21 views
4

J'ai beaucoup à plusieurs modèles, suivant l'exemple this great railscastune association Validation auto-référentiel ne lie pas à l'instance d'origine dans des rails

Mes liens modèles auteurs les uns aux autres. Je voudrais valider qu'un auteur ne peut pas l'ami lui-même. Je sais que je peux gérer cela au niveau de l'interface utilisateur, mais j'aimerais avoir une validation en place pour empêcher un bug dans l'interface utilisateur de l'autoriser. J'ai essayé validates_exclusion_of, mais cela ne fonctionne pas. Voici mon modèle pour la relation:

class Friendship < ActiveRecord::Base 
    # prevent duplicates 
    validates_uniqueness_of :friend_id, :scope => :author_id 
    # prevent someone from following themselves (doesn't work) 
    validates_exclusion_of :friend_id, :in => [:author_id] 

    attr_accessible :author_id, :friend_id 
    belongs_to :author 
    belongs_to :friend, :class_name => "Author" 
end 

Répondre

6

Vous devez utiliser une validation personnalisée:

class Friendship < ActiveRecord::Base 
    # ... 

    validate :disallow_self_referential_friendship 

    def disallow_self_referential_friendship 
    if friend_id == author_id 
     errors.add(:friend_id, 'cannot refer back to the author') 
    end 
    end 
end 
+0

Cela fonctionne parfaitement. Merci! –