Details
-
Task
-
Status: Closed
-
Major - P3
-
Resolution: Gone away
-
None
-
None
-
None
Description
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>'
Attachments
Issue Links
- is related to
-
MONGOID-4030 Typed array as field type
-
- Backlog
-