:key
たとえば、というキーを持つモデルを宣言できますか? キーに使用できない単語はありますか?
3 に答える
_idおよび_type。また、関連付けなど、mongomapper doc/edocインスタンスメソッドと同じメソッドを作成するもの。
最初の質問は、自分で簡単に答えられます。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 になります。を使用すると、オブジェクトをデータベースから戻すときに、_type
MongoMapper がキーにあるもののインスタンスをインスタンス化しようとします。_test
John Nunemaker の回答の具体例を次に示します。
次のトークンがオブジェクトのインスタンス コードで参照されているため、同じ名前のキーと衝突するという難しい方法を発見しました (mongo_mapper/plugins/callbacks.b):
:destroy
:save
:create
:update
あなたが定義する場合
key :update, Integer
その後、GET、DELETE、POST は実行できますが、PUT は実行できません。これは、run_callbacks(:update) を呼び出そうとするためです。これは、その時点でナンセンスになっています。それを修正する方法がわからないので、モデルに「更新」というフィールドを作成できます。誰?
フォローアップ: 実際の更新を実行するインスタンス メソッドも :update と呼ばれているようです。そのため、これらのトークンをコールバックに使用しないようにすることは役に立ちません。むしろ、これはメソッドとして使用される前にコールバック型 FIRST として使用されるため、はるかに奇妙なエラーを引き起こすインスタンス メソッドと衝突した場合にすぎません。