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は有効なキーだと思います!

私の知る限り、自分のデータに使用してはいけない唯一のキーは_id_typeです。どちらでも使用できますが、動作が変わります。を使用_idすると、そのキーとして設定しているものはすべて、オブジェクトの一意の ID になります。を使用すると、オブジェクトをデータベースから戻すときに、_typeMongoMapper がキーにあるもののインスタンスをインスタンス化しようとします。_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 と呼ばれているようです。そのため、これらのトークンをコールバックに使用しないようにすることは役に立ちません。むしろ、これはメソッドとして使用される前にコールバック型 FIRST として使用されるため、はるかに奇妙なエラーを引き起こすインスタンス メソッドと衝突した場合にすぎません。

于 2013-03-29T12:33:55.363 に答える