0

通过 MongoMapper 向现有模型(使用现有数据)添加密钥时,我可以使用新密钥创建新文档,但是当尝试使用相同密钥访问现有文档时,它会失败,说明它是“未定义的方法”。

我想知道是否有人有任何见解。

提前致谢!

(是的,这些示例被截断了。)

- model.rb -

key :key_1
key :key_2

- would return -
#<Model _id: BSON::ObjectID('4ba821abebddb9094c000001'), key_1: "test", key_2: "test">


- model.rb (updated version) -

key :key_1
key :key_2
key :key_3

- would still only return -
#<Model _id: BSON::ObjectID('4ba821abebddb9094c000001'), key_1: "test", key_2: "test">

- but if a new doc is created - 
#<Model _id: BSON::ObjectID('4ba821abebddb9094c000001'), key_1: "test", key_2: "test">
#<Model _id: BSON::ObjectID('7ba131abedaab9094c007482'), key_1: "test", key_2: "test", key_3: "test">

很好,除非我在尝试访问第一个文档的 :key_3 时收到方法未定义错误。

导轨 2.3.4

MongoMapper 0.7.4

4

2 回答 2

0

我根本没有看到这种行为,即使在与更新类之前实例化的对象进行交互时也是如此。在 irb 中运行以下命令时,我没有错误:

>> gem 'mongo_mapper', '0.7.4'
=> true
>> require 'mongo_mapper'
=> true
>> MongoMapper.database = 'test'
=> "test"
>> class Foo
>>   include MongoMapper::Document
>>   key :something
>>   end
=> #<MongoMapper::Plugins::Keys::Key:0x101f8f938 @default_value=nil, @type=nil, @name="something", @options={}>
>> f = Foo.new(:something => 'thing')
=> #<Foo _id: ObjectID('4c4dc9af712337447c000001'), something: "thing">
>> f.save
=> true
>> f
=> #<Foo _id: ObjectID('4c4dc9af712337447c000001'), something: "thing">
>> class Foo
>>   key :something_else
>>   end
=> #<MongoMapper::Plugins::Keys::Key:0x101f6ad90 @default_value=nil, @type=nil, @name="something_else", @options={}>
>> f
=> #<Foo something_else: nil, _id: ObjectID('4c4dc9af712337447c000001'), something: "thing">
>> f.something_else
=> nil

由于您似乎遇到了不寻常的问题,因此您的用例的更多详细信息会有所帮助。你能给我们一个更完整的代码示例吗?如果您在失败的代码中有专有的东西,请将其削减到仍然失败所需的最小情况,并发布您的模型的完整声明以及您用来访问它们的代码。

于 2010-07-26T17:51:22.313 回答
0

使用设置命令...

    @model.set(:key_3 => "VALUE...")
    @model.reload
    @model.key_3 # => "VALUE..."
    @model.save

此代码将为您的模型创建一个新字段,确认您已经使用新键进行了定义:

    key :key_3

享受,

于 2014-08-19T15:23:05.067 回答