You just need to define the key as:
key :my_name, ACustomType
Rather than:
key :my_name, type: ACustomType
key
's method signature is def key(name, type, options = {})
سؤال
I've been using MongoMapper for a couple weeks now and like a lot of its features. One of the most appealing ones is the ability to define custom key types and validation methods (see "Custom Types" on this page: http://mongomapper.com/documentation/types.html).
However, I tried using them with a small test and the validation methods aren't firing in my case. Here's the code:
require 'mongo_mapper'
MongoMapper.connection = Mongo::Connection.new('localhost', 27017)
MongoMapper.database = "mmtestdb"
class ACustomType
def self.to_mongo(value)
puts "to_mongo is being called"
"A Safe Value"
end
def self.from_mongo(value)
puts "from_mongo is being called"
"A Safer Value"
end
end
class TestClass
include MongoMapper::Document
key :my_name, type: ACustomType
end
TestClass.delete_all
new_object = TestClass.new
new_object.my_name = "Unsafe Value!"
puts new_object.inspect
new_object.save
puts TestClass.all.inspect
And here are my results:
#<TestClass _id: BSON::ObjectId('525db435ab48651f64000001'), my_name: "Unsafe Value!">
[DEPRECATED] The 'safe' write concern option has been deprecated in favor of 'w'.
[#<TestClass _id: BSON::ObjectId('525db435ab48651f64000001'), my_name: "Unsafe Value!">]
I'm aware of the "write concern" issue and patched it using the solution at https://github.com/mongomapper/mongomapper/issues/507. Here's that code:
# Monkey Patch to solve issue https://github.com/jnunemaker/mongomapper/issues/507
module MongoMapper
module Plugins
module Querying
private
def save_to_collection(options={})
@_new = false
collection.save(to_mongo, :w => options[:safe] ? 1 : 0)
end
end
end
end
I omitted it from my test example because the results are the same with or without it.
Can anyone help? Thanks so much.
المحلول
You just need to define the key as:
key :my_name, ACustomType
Rather than:
key :my_name, type: ACustomType
key
's method signature is def key(name, type, options = {})