-
Type: Task
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
Greetings,
Thank you for producing Mongoid! I love it!
I am attempting to save a series of objects (with mongoized,demonogize, evolve) into an Array. I get an error "undefined method `bson_dump'" which is at the bottom of the document. I have reproduced the issue using the Point example from the custom fields demo.
Thank you!
-daniel
test.rb
require 'mongoid' Mongoid.load!("mongoid.yml", :test) # this is the point example taken from the documentation class Point attr_reader :x, :y def initialize(x, y) @x, @y= x, y end # Converts an object of this instance into a database friendly value. def mongoize [ x, y ] end class << self # Get the object as it was stored in the database, and instantiate # this custom class from it. def demongoize(object) Point.new(object[0], object[1]) end # Takes any possible object and converts it to how it would be # stored in the database. def mongoize(object) case object when Point then object.mongoize when Hash then Point.new(object[:x], object[:y]).mongoize else object end end # Converts the object that was supplied to a criteria and converts it # into a database friendly form. def evolve(object) case object when Point then object.mongoize else object end end end end # saving a class as a single field works fine class Single include Mongoid::Document field :location, :type => Point end s = Single.new s.location = Point.new(1, 2) s.save # when saving the an array of objects, there is the error given class Plural include Mongoid::Document field :locations, :type => Array, :default => [] end p = Plural.new p.locations << Point.new(1, 2) p.locations << Point.new(3, 4) p.save
mongoid.yml
test: sessions: default: hosts: - localhost:27017 database: point_array options: allow_dynamic_fields: false identity_map_enabled: true include_root_in_json: true include_type_for_serialization: true scope_overwrite_exception: true raise_not_found_error: false skip_version_check: false use_activesupport_time_zone: false use_utc: true
error
/var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/bson/extensions/array.rb:14:in {{bson_dump': undefined method }}bson_dump' for #<Point:0x000000027c22a0 @x=1, @y=2> (NoMethodError)
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/bson/extensions/hash.rb:15:in `block in bson_dump'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/bson/extensions/hash.rb:14:in `each'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/bson/extensions/hash.rb:14:in `bson_dump'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/bson/document.rb:36:in `serialize'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/protocol/message.rb:129:in `block in serialize_documents'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/protocol/message.rb:128:in `each'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/protocol/message.rb:128:in `serialize_documents'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/protocol/message.rb:287:in `serialize'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/connection.rb:153:in `block in write'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/connection.rb:151:in `each'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/connection.rb:151:in `write'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:578:in `block (2 levels) in flush'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:138:in `ensure_connected'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:577:in `block in flush'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:592:in `logging'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:576:in `flush'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:565:in `process'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:253:in `insert'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/session/context.rb:63:in `block in insert'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/session/context.rb:109:in `block in with_node'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/cluster.rb:209:in `block in with_primary'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/node.rb:183:in `ensure_primary'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/cluster.rb:208:in `with_primary'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/session/context.rb:108:in `with_node'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/session/context.rb:56:in `insert'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/collection.rb:106:in `block in insert'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/session.rb:324:in `with'
from /var/lib/gems/1.9.1/gems/moped-1.4.5/lib/moped/collection.rb:105:in `insert'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence/operations/insert.rb:27:in `block in persist'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence/insertion.rb:25:in `block (2 levels) in prepare'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:403:in `_run*4468728994625756828*create*237314211246586726*callbacks'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:405:in `__run_callback'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/callbacks.rb:130:in `run_callbacks'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence/insertion.rb:24:in `block in prepare'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:403:in `_run*4468728994625756828*save*237314211246586726*callbacks'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:405:in `__run_callback'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
from /var/lib/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/callbacks.rb:130:in `run_callbacks'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence/insertion.rb:23:in `prepare'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence/operations/insert.rb:26:in `persist'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence.rb:51:in `insert'
from /var/lib/gems/1.9.1/gems/mongoid-3.1.3/lib/mongoid/persistence.rb:80:in `save'
from test.rb:66:in `<main>'
- is related to
-
MONGOID-4030 Typed array as field type
- Backlog