2012-01-07 7 views
0

Я пытаюсь написать пример приложения, используя Ruby on Rails и Mongoid Mapper.Mongoid Создать новых пользователей

Для некоторых видов тестирования я хочу написать 1000 Testusers в MongoDB ...

С кодом Поставка жидкостных хроматографов Mongoid не в состоянии писать уникальные UID-х. В моей рубиновой консоли я получил правильный номер для счетчика, но не для 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 для вас и управляет значением во время операции create. Просто удалите поле: uid,: type => String from model

+0

Да, спасибо, но это определенно не тот индекс, который я хочу использовать ... например: 4f08d13945a36b20370048bf - это идентификатор последнего пользователя, который я вставил ... спасибо за ваш ответ, но знаете ли вы, почему это происходит? ? – user934801

+0

Что вы подразумеваете под «не тот индекс, который я хочу использовать». ? MongoDb использует тип ObjectId как «первичный ключ» своих «записей», поэтому MongoId использует тот же тип. – ema

0

Если вы хотите использовать свои собственные идентификаторы, вы можете изменить имя поля uid на _id, и оно должно работать нормально. Тем не менее, созданный по умолчанию mongo _id упростит масштабирование, и его использование устраняет один из наиболее сложных аспектов осколка, если вам когда-либо понадобится эта функция.

Если вы хотите использовать те, которые были созданы по умолчанию, они включаются автоматически, если явно не переопределены (поведение, которое вы видели), поэтому просто удалите свое настраиваемое поле, и вы должны быть настроены.

Вы можете узнать больше об объектах here.

Смежные вопросы