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

Versioning causes nil reference in parent/child relationships

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

      UPDATE

      The bug reported below occurs because the inverse_of option is missing. Adding inverse_of to the relations fixes the problem. However, this problem doesn't occur if Mongoid::Versioning is removed from the class.

      Thus, this bug should not occur if the inverse_of option is missing when using Mongoid::Versioning .


      Mondoid::Versioning breaks recursive parent/child relationships. The code

      class Simple
        include Mongoid::Document
      
        # comment this line out and there will be no error
        include Mongoid::Versioning
      
        field :rule, type: String, default: 'hello'
      
        belongs_to :parent_rule, class_name: 'Simple'
        has_many :child_rules, class_name: 'Simple', dependent: :delete
      end
      
      root = Simple.create!({message: "root"})
      child = Simple.create!
      root.child_rules << child
      

      will generate

      
      undefined method `first' for #<Simple:0x0000010399ac88>
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/activemodel-3.1.0/lib/active_model/attribute_methods.rb:385:in `method_missing'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/attributes.rb:182:in `method_missing'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/many.rb:241:in `block (2 levels) in substitute'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/atomic.rb:61:in `call'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/atomic.rb:61:in `block in atomically'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/atomic.rb:82:in `call'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/atomic.rb:82:in `count_executions'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/atomic.rb:60:in `atomically'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/many.rb:240:in `block in substitute'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/many.rb:233:in `tap'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/embedded/many.rb:233:in `substitute'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/accessors.rb:126:in `block (2 levels) in setter'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/bindings/referenced/many.rb:26:in `block in bind_one'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/binding.rb:21:in `binding'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/bindings/referenced/many.rb:21:in `bind_one'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/proxy.rb:19:in `bind_one'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/many.rb:295:in `append'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/many.rb:35:in `block (2 levels) in <<'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/many.rb:33:in `each'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/many.rb:33:in `block in <<'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/batch.rb:65:in `count_executions'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/batch.rb:42:in `batched'
      /Users/sim/.rvm/gems/ruby-1.9.2-p180@match_admin/gems/mongoid-2.2.1/lib/mongoid/relations/referenced/many.rb:32:in `<<'
      

            Assignee:
            Unassigned Unassigned
            Reporter:
            ssimeonov ssimeonov
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: