has_many_polymorphs plugin
単一の親から同じ子への複数のポリモーフィック リレーション ( ) を定義しようとしています。
メモには多くの閲覧者がいます
メモには多くの編集
者がいます 閲覧者はユーザーまたはグループのいずれかです 編集者はユーザーまたはグループの
いずれか
です 許可は、、、、、フィールドとのnote_id
関連付けモデルですviewer_id
viewer_type
editor_id
editor_type
Note モデルで has_many_polymorphs リレーションが 1 つしか定義されていない限り、すべてが期待どおりに機能します。
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 ....>
さて、2番目のリレーションを追加すると問題が発生し始めます
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'
の定義を改良しようとしましたhas_many_polymorphs
が、うまくいきませんでした。、 、 のSTIモデルでもありませViewPermission < Permission
んEditPermission < Permission
。
任意の考え/回避策/問題のポインタをいただければ幸いです。
レール 2.3.0