2012-01-07 8 views
0

Ruby on RailsとMongoid Mapperを使用したサンプルアプリケーションを作成しようとしています。 Mongoid bolowコードでMongoid新しいユーザーを作成

が一意のUID年代を書き込むことができない私はMongoDBのに千Testusersを書きたいテストのいくつかの種類のために

...。私のルビーコンソールでは、私はカウンターのために正しい番号を得たが、uidはそうではなかった。

誰も私が忘れてしまったものを知っていますか?

class User 

    include Mongoid::Document 
    include Mongoid::Timestamps 

    def self.create_users 
    (1..1000).each do |f| 
     user = User.new(uid: f.to_s, first_name: "first_name", last_name: "last_name", e_mail: "e_mail") 
     user.save! 
     puts f 
     puts user.uid 
    end 
    end 

    field :uid, :type => String 
    field :first_name, :type => String 
    field :last_name, :type => String 
    field :e_mail, :type => String 
    field :messages, :type => String 

    attr_accessible :first_name, :last_name, :e_mail 
    validates_presence_of :uid, :first_name, :last_name, :e_mail 
    validates_uniqueness_of :uid 

    has_many :messages 
end 

答えて

0

モデルにフィールドuidを指定する必要はありません。 MongoIdはあなたのidフィールドを追加し、作成操作中に値を管理します。 単にフィールドを削除します:uid、:type =>モデルからの文字列

+0

はいおかげで、私は使用したいインデックスの種類は、例えば...間違いないthatsの:4f08d13945a36b20370048bfは私が挿入された最後のユーザーのIDは...あなたの答えに感謝ですが、これはなぜ起こるか知っていますか? ? – user934801

+0

「使用したいインデックスの種類ではない」とはどういう意味ですか? ? MongoDbはObjectId型を "レコード"の "主キー"として使用するため、MongoIdは同じ型を使用します。 – ema

0

独自のIDを使用する場合は、uidフィールドの名前を_idに変更するとうまくいくはずです。しかし、デフォルトで生成されたmongo_idは、拡張が容易になり、シャドウ機能が必要な場合にシャーディングの難しい側面の1つを取り除きます。

あなたはデフォルトで生成されたものを使用したい場合は、明示的に上書きされない限り、それらが自動的に含まれます(あなたが見てきた行動)ので、ちょうどあなたのカスタムフィールドを削除し、あなたはすべてのセットでなければなりません。

あなたはhereたObjectIdについての詳細を読むことができます。

関連する問題