Есть ли способ для mongoid использовать целое число (число) в качестве идентификатора по умолчанию, а не длинное хеш-значение? - PullRequest
7 голосов
/ 03 июня 2011

Я просто хочу иметь характеристику по умолчанию ActiveRecord, которая использует инкрементные целые числа в качестве идентификатора, чтобы уменьшить длину URL-адреса.

Например, первая созданная статья будет иметь URL-адрес типа «app.com/articles/1», который по умолчанию используется в ActiveRecord.

Есть ли драгоценный камень, который поддерживает это в монгоиде?

Ответы [ 3 ]

6 голосов
/ 04 июня 2011

Вы всегда можете сгенерировать более короткие уникальные токены для идентификации каждой из ваших записей (в качестве альтернативы порции), поскольку ваша цель - просто уменьшить длину URL.

Я недавно (сегодня) написал гем - mongoid_token , который должен взять на себя любую тяжелую работу по созданию уникальных токенов для ваших документов mongoid. Он не будет генерировать их последовательно, но он должен помочь вам в вашей проблеме (я надеюсь!).

3 голосов
/ 06 июня 2011

Вы можете попробовать что-то вроде этого:

class Article
  include Mongoid::Document
  identity :type => Integer
  before_create :assign_id

  def to_param
    id.to_s
  end

  private

    def assign_id
      self.id = Sequence.generate_id(:article)
    end
end

class Sequence
  include Mongoid::Document
  field :object
  field :last_id, type => Integer

  def self.generate_id(object)
    @seq=where(:object => object).first || create(:object => object)
    @seq.inc(:last_id,1)
  end
end

Я не пробовал такой подход точно (используя его с внутренними идентификаторами), но я почти уверен, что он должен работать. Посмотрите на мое заявление здесь: https://github.com/daekrist/Mongologue Я добавил «видимый» идентификатор под названием pid в свой пост и комментарий модели. Также я использую текстовый идентификатор для модели Tag.

2 голосов
/ 03 июня 2011

AFAIK это невозможно по замыслу: http://groups.google.com/group/mongoid/browse_thread/thread/b4edab1801ac75be

Таким образом, подход, используемый сообществом, заключается в использовании слагов: https://github.com/crowdint/slugoid

...