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

set コマンドを使用して...

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

このコードは、モデルの新しいフィールドを作成します。新しいキーで既に定義されていることを確認してください。

    key :key_3

楽しみ、

于 2014-08-19T15:23:05.067 に答える
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 に答える