Uploaded image for project: 'Mongoid'
  1. Mongoid
  2. MONGOID-681

Strange access exception when building embedded document with references

    • Type: Icon: Task Task
    • Resolution: Done
    • 12_01_17
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None

      I'm having strange error after upgrading from beta20 to rc7, where I have a Spot collection that has votes as embedded collections, at the same time, a vote is referenced in one user, Now:

      > s = Spot.first
      => #<Spot _id: .....>
      > s.votes
      => []
      > u = User.first
      => #<User _id: .....>

      So far, things are normal, but when building the association:

      > s.votes.build(:vote=>1,:user=>u)
      Mongoid::Errors::InvalidCollection: Access to the collection for Vote is not allowed since it is an embedded document, please access a collection from the root document.
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/collections.rb:21:in `collection'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/contexts/mongo.rb:126:in `execute'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/contexts/mongo.rb:185:in `iterate'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/criteria.rb:109:in `block in each'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/criteria.rb:109:in `tap'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/criteria.rb:109:in `each'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/referenced/many.rb:187:in `entries'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/referenced/many.rb:187:in `block in load!'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/referenced/many.rb:185:in `tap'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/referenced/many.rb:185:in `load!'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/referenced/many.rb:264:in `append'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/many.rb:26:in `block in <<'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/many.rb:24:in `each'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/many.rb:24:in `<<'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/bindings/referenced/in.rb:36:in `bind'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/referenced/in.rb:30:in `bind'
      ... 7 levels...
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/attributes/processing.rb:135:in `block in process_relations'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/attributes/processing.rb:130:in `each_pair'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/attributes/processing.rb:130:in `process_relations'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/attributes/processing.rb:118:in `process_pending'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/attributes/processing.rb:25:in `process'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/multi_parameter_attributes.rb:59:in `process'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/attributes.rb:169:in `write_attributes'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/many.rb:46:in `block in build'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/many.rb:44:in `tap'
      .rvm/gems/ruby-1.9.2-p0/gems/mongoid-2.0.0.rc.7/lib/mongoid/relations/many.rb:44:in `build'
      from (irb):3
      .rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:44:in `start'
      .rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start'
      .rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>'
      from script/rails:6:in `require'
      from script/rails:6:in `<main>'ruby-1.9.2-p0

      Now trying:

      > s.votes
      => [#<Vote _id: 4d53c91de1b4523765000001, created_at: nil, updated_at: nil, vote: 1, user_id: BSON::ObjectId('4d17c5cae1b4521ea0000003')>]

      Returns the vote that I tried to build.

      The same error happens when I try something like:

      > v = s.votes.build(:vote=>1)
      > v.user = User.first

      Ideas?

            Assignee:
            Unassigned Unassigned
            Reporter:
            khelll Khaled alHabache
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: