NoMethodError: private method `existence_check' called for Class
NoMethodError: private method `existence_check' called for Class
我有一个很奇怪的问题。
场景:我正在 Rails 中与 MongoDB 一起制作照片集(mongoid gem ),其中每张照片都属于一个相册。一些 mongo 字段由关注点提供,并且模型已正确命名。
所以,
担忧:MediaConcerns::Base
module MediaConcerns
module Base
extend ActiveSupport::Concern
included do
field :photo_description, type: String
end
end
end
担忧:MediaCollectionConcerns::Base
module MediaCollectionConcerns
module Base
extend ActiveSupport::Concern
included do
field :album_title, type: String
field :album_description, type: String
end
end
end
而MediaType::Photo
是:
module MediaType
class Photo
include Mongoid::Document
include Mongoid::Timestamps::Short
include MediaConcerns::Base
embedded_in :photo_album, class_name: 'MediaCollection::PhotoAlbum'
end
end
而 MediaCollection::PhotoAlbum
是:
module MediaCollection
class PhotoAlbum
include Mongoid::Document
include Mongoid::Timestamps::Short
include MediaCollectionConcerns::Base
embeds_many :photos, class_name: 'MediaType::Photo'
end
end
顾虑与否,问题依旧,与embedded_in
和embeds_many
有关。
通过 Rails 控制台,当我尝试 MediaCollection::PhotoAlbum.new
它给出:
NoMethodError: private method `existence_check' called for MediaCollection::PhotoAlbum:Class
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:355:in `relate'
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:85:in `embeds_many'
from /home/marco/workspace/backend/app/models/media_collection/photo_album.rb:10:in `<class:PhotoAlbum>'
from /home/marco/workspace/backend/app/models/media_collection/photo_album.rb:2:in `<module:MediaCollection>'
from /home/marco/workspace/backend/app/models/media_collection/photo_album.rb:1:in `<top (required)>'
MediaType::Photo.new
也一样:
NoMethodError: private method `existence_check' called for MediaType::Photo:Class
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:355:in `relate'
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:56:in `embedded_in'
from /home/marco/workspace/backend/app/models/media_type/photo.rb:15:in `<class:Photo>'
from /home/marco/workspace/backend/app/models/media_type/photo.rb:2:in `<module:MediaType>'
from /home/marco/workspace/backend/app/models/media_type/photo.rb:1:in `<top (required)>'
有什么问题吗?如果我删除(仅用于调试)关系 embeds_many
和 embedded_in
,问题就解决了,但我需要嵌入这些文档!
也许 Rails 找不到 :photos
,但我已按照 mongoid 文档的建议指定了 class_name: 'MediaType::Photo'
,并且为 [= 指定了相同的内容28=]
我需要帮助。谢谢。
我终于找到了原因但没有解决,是gem上的一个bug。
阅读此处:github issue
我有一个很奇怪的问题。
场景:我正在 Rails 中与 MongoDB 一起制作照片集(mongoid gem ),其中每张照片都属于一个相册。一些 mongo 字段由关注点提供,并且模型已正确命名。 所以,
担忧:MediaConcerns::Base
module MediaConcerns
module Base
extend ActiveSupport::Concern
included do
field :photo_description, type: String
end
end
end
担忧:MediaCollectionConcerns::Base
module MediaCollectionConcerns
module Base
extend ActiveSupport::Concern
included do
field :album_title, type: String
field :album_description, type: String
end
end
end
而MediaType::Photo
是:
module MediaType
class Photo
include Mongoid::Document
include Mongoid::Timestamps::Short
include MediaConcerns::Base
embedded_in :photo_album, class_name: 'MediaCollection::PhotoAlbum'
end
end
而 MediaCollection::PhotoAlbum
是:
module MediaCollection
class PhotoAlbum
include Mongoid::Document
include Mongoid::Timestamps::Short
include MediaCollectionConcerns::Base
embeds_many :photos, class_name: 'MediaType::Photo'
end
end
顾虑与否,问题依旧,与embedded_in
和embeds_many
有关。
通过 Rails 控制台,当我尝试 MediaCollection::PhotoAlbum.new
它给出:
NoMethodError: private method `existence_check' called for MediaCollection::PhotoAlbum:Class
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:355:in `relate'
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:85:in `embeds_many'
from /home/marco/workspace/backend/app/models/media_collection/photo_album.rb:10:in `<class:PhotoAlbum>'
from /home/marco/workspace/backend/app/models/media_collection/photo_album.rb:2:in `<module:MediaCollection>'
from /home/marco/workspace/backend/app/models/media_collection/photo_album.rb:1:in `<top (required)>'
MediaType::Photo.new
也一样:
NoMethodError: private method `existence_check' called for MediaType::Photo:Class
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:355:in `relate'
from /home/marco/.rvm/gems/ruby-2.4.0/gems/mongoid-6.1.0/lib/mongoid/relations/macros.rb:56:in `embedded_in'
from /home/marco/workspace/backend/app/models/media_type/photo.rb:15:in `<class:Photo>'
from /home/marco/workspace/backend/app/models/media_type/photo.rb:2:in `<module:MediaType>'
from /home/marco/workspace/backend/app/models/media_type/photo.rb:1:in `<top (required)>'
有什么问题吗?如果我删除(仅用于调试)关系 embeds_many
和 embedded_in
,问题就解决了,但我需要嵌入这些文档!
也许 Rails 找不到 :photos
,但我已按照 mongoid 文档的建议指定了 class_name: 'MediaType::Photo'
,并且为 [= 指定了相同的内容28=]
我需要帮助。谢谢。
我终于找到了原因但没有解决,是gem上的一个bug。
阅读此处:github issue