2012-07-19 3 views
0

Utilisation de Ruby 1.9.3 et ActiveRecord 3.2.6.La comparaison de deux instantanés du même objet activeecord renvoie false si attr_accessible est présent. Ruby

Je rencontre un problème lorsque j'essaie de comparer un objet ActiveRecord qui a attr_accessible: une propriété qui est définie dans un tableau d'objets associés en utilisant include (objet).

Voici mes 2 modèles ActiveRecord, compte et rôle.

compte:

class Account < ActiveRecord::Base 

    # Associations 
    # 
    has_many :role_assignments, :dependent => :destroy 
    has_many :roles, :through => :role_assignments 
end 

Rôle:

class Role < ActiveRecord::Base 

    attr_accessible :title 

    # Associations 
    # 
    has_many :role_assignments, :dependent => :destroy 
    has_many :accounts, :through => :role_assignments 
end 

Si je puis créer deux rôles (dire "Admin" et "éditeur") et attribuer le "Admin" un à un compte , Je suppose que cela fonctionnerait:

role = Role.find_by_title("Admin") 
account = Account.first # => The Account we assigned the "Admin" role to 

account.roles.include?(role) # => Should be true but returns false 

Mais cela retourne réellement faux!

Si je supprime le 'attr_accessible: title' du modèle de rôle et répète ce qui précède, il renvoie true.

Donc je suppose que ma question est ... pourquoi attr_accessible provoquerait ce problème particulier? ou est-ce un cas que je dois faire mon chèque pour voir si le rôle existe dans le compte.roles d'une manière différente?

+0

Comment avez-vous créé vos rôles? –

Répondre

3

Vous pouvez essayer

account.role_ids.include?(role.id) 
+0

Oui, ça a marché, merci @yuri. Savez-vous à la main pourquoi cela ne fonctionne pas directement sur l'objet? – sleepingstu

+0

Je pense que les objets eux-mêmes ont des attributs avec des identifiants uniques, l'allocation de mémoire et l'IRM l'exigent, je pense que c'est correct de toute façon. – holaSenor

Questions connexes