0

例如,我可以用一个名为 的键声明一个模型:key吗?有什么词不能用作键吗?

4

3 回答 3

3

_id 和 _type。此外,任何会创建与 mongomapper doc/edoc 实例方法相同的方法的东西,例如关联等。

于 2010-08-04T04:48:45.803 回答
2

第一个问题如果很容易回答你自己。打开 irb 并尝试:

>> require 'mongo_mapper'
=> true
>> MongoMapper.database = 'test'
=> "test"
>> class Test
>>   include MongoMapper::Document
>>   key :key
>>   end
=> #<MongoMapper::Plugins::Keys::Key:0x101fc7a90 @default_value=nil, @type=nil, @name="key", @options={}>
>> t = Test.new(:key => 'value')
=> #<Test _id: BSON::ObjectID('4c4dcced7123374587000001'), key: "value">
>> t.save
=> true
>> Test.all
=> [#<Test _id: BSON::ObjectID('4c4dcced7123374587000001'), key: "value">]

没有错误?我猜key是一个有效的密钥!

据我所知,您不应该为自己的数据使用的唯一键是_idand _type。您可以使用其中任何一种,但它们会改变行为。使用_id将使您设置为该键的任何内容都成为对象的唯一 ID。当从数据库中取回对象时,使用_type将导致 MongoMapper 尝试实例化密钥中任何内容的实例。_test

于 2010-07-26T18:03:07.500 回答
0

这是John Nunemaker回答的一个具体例子。

我发现在您的对象的实例代码中引用以下标记的困难方式,因此将与任何同名的键(mongo_mapper/plugins/callbacks.b)发生冲突:

:destroy
:save
:create
:update

如果你定义

key :update, Integer

那么您将能够 GET、DELETE、POST,但不能 PUT,因为这将尝试调用 run_callbacks(:update),这在那时已成为无稽之谈。我不知道如何解决这个问题,所以我可以在我的模型中有一个名为“更新”的字段。任何人?

后续:执行实际更新的实例方法似乎也称为:update,因此消除使用这些令牌进行回调无济于事。相反,这只是与实例方法发生冲突的情况,这会导致更奇怪的错误,因为它在用作方法之前首先用作回调类型。

于 2013-03-29T12:33:55.363 回答