NoMethodError:为类调用私有方法"existence_check"



我有一个很奇怪的问题。

场景:我正在使用MongoDB(mongoid gem(在Rails中处理一组照片,其中每张照片都属于一个相册。一些 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_inembeds_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_manyembedded_in的关系,问题就解决了,但我需要嵌入这些文档!

也许 Rails 找不到:photos,但我按照 mongoid 文档的建议指定了class_name: 'MediaType::Photo',并且为'MediaCollection::PhotoAlbum'指定了相同的内容

我需要帮助。谢谢。

我终于找到了原因,但没有找到解决方案,是宝石上的错误。

在这里阅读: github 问题

最新更新