Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeremy6d/1042571 to your computer and use it in GitHub Desktop.
Save jeremy6d/1042571 to your computer and use it in GitHub Desktop.
Mongoid references_many adding problem
require 'mongoid'
require 'test/unit'
Mongoid.configure do |config|
config.master = Mongo::Connection.new.db("adding_to_references_many_test")
end
class Node
include Mongoid::Document
field :title, :type => String
references_many :children, :class_name => "Node",
:foreign_key => :parent_id
referenced_in :parent, :class_name => "Node"
end
class AddingToReferencesManyTest < Test::Unit::TestCase
n1 = Node.create :title => "Node 1"
n2 = Node.create :title => "Node 2"
n1.children << n2
n1.save
assert_equal [n2], n1.reload.children
end
10:49 ~/Code>gem which mongoid
/Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid.rb
10:49 ~/Code>ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
10:49 ~/Code>ruby mongoid_test.rb
/Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/attributes.rb:162:in `method_missing': undefined method `entries' for #<Node:0x000001010e27a0> (NoMethodError)
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:219:in `block in load!'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:217:in `tap'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:217:in `load!'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/accessors.rb:28:in `block in build'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/accessors.rb:27:in `tap'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/accessors.rb:27:in `build'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/accessors.rb:166:in `block (2 levels) in setter'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/extensions/object/yoda.rb:22:in `do_or_do_not'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/bindings/referenced/many.rb:46:in `bind_one'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:299:in `append'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:29:in `block (2 levels) in <<'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:27:in `each'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:27:in `block in <<'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/batch.rb:64:in `count_executions'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/batch.rb:40:in `batched'
from /Users/jeremyweiland/.rvm/gems/ruby-1.9.2-p180/gems/mongoid-2.0.2/lib/mongoid/relations/referenced/many.rb:26:in `<<'
from mongoid_test.rb:22:in `<class:AddingToReferencesManyTest>'
from mongoid_test.rb:19:in `<main>'
@paulelliott
Copy link

I think you are just missing the inverse_of. See below

class Node
  include Mongoid::Document

  field :title, :type => String

  references_many :children, :class_name => "Node",
                             :foreign_key => :parent_id, :inverse_of => :parent

  referenced_in :parent, :class_name => "Node"
end

@jeremy6d
Copy link
Author

I updated the example to reflect the relations in my production app.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment