Mongoid создает новых пользователей - PullRequest
0 голосов
/ 07 января 2012

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

Для какого-то тестирования я хочу написать 1000 тестировщиков в MongoDB ...

С кодом Bolow Mongoid не может писать уникальные идентификаторы 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

Ответы [ 2 ]

0 голосов
/ 09 января 2012

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

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

Вы можете прочитать больше об ObjectIds здесь .

0 голосов
/ 07 января 2012

Вам не нужно указывать идентификатор поля в ваших моделях. MongoId добавляет поле id для вас и управляет значением во время операции создания. Просто удалите поле: uid,: type => String из модели

...