Je suis en train de définir plusieurs relations polymorphes (has_many_polymorphs plugin
) d'un parent seul à même les enfants.has_many_polymorphs multiples dans un seul modèle
note a de nombreux téléspectateurs
note a de nombreux éditeurs
Les téléspectateurs peuvent être soit des utilisateurs ou des groupes
éditeurs pourraient être Utilisateurs ou groupes
L'autorisation est le modèle d'association avec note_id
, viewer_id
, viewer_type
, editor_id
, editor_type
champs
Tout fonctionne comme attendre aussi longtemps que je ne dispose que d'une relation has_many_polymorphs définie dans le modèle note
class User < ActiveRecord::Base; end
class Group < ActiveRecord::Base; end
class Note < ActiveRecord::Base
has_many_polymorphs :viewers, :through => :permissions, :from => [:users, :groups]
end
class Permission < ActiveRecord::Base
belongs_to :note
belongs_to :viewer, :polymorphic => true
end
Note.first.viewers << User.first # => [#<User id: 1, ....>]
Note.first.viewers << Group.first # => [#<User id: 1, ....>, #<Group ...>]
Note.first.viewers.first # => #<User ....>
Note.first.viewers.second # => #<Group ....>
Maintenant, les problèmes commencent à apparaître quand j'ajoute la seconde relation
class Note < ActiveRecord::Base
has_many_polymorphs :viewers, :through => :permissions, :from => [:users, :groups]
has_many_polymorphs :editors, :through => :permissions, :from => [:users, :groups]
end
class Permission < ActiveRecord::Base
belongs_to :note
belongs_to :viewer, :polymorphic => true
belongs_to :editor, :polymorphic => true
end
Note.first.viewers << User.first # => [#<User id: ....>]
# >>>>>>>>
Note.first.editors << User.first
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.constantize
... vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/base.rb:18:in `instantiate'
J'ai essayé d'affiner la définition de has_many_polymorphs
, mais cela n'a pas fonctionné. Pas même avec un modèle STI pour ViewPermission < Permission
et EditPermission < Permission
.
Toute pensée/solutions de contournement/pointeurs d'émission sont appréciés.
Rails 2.3.0
Je pense que vous devez ajouter certains signes de ponctuation dans votre deuxième paragraphe ... –