7 votes

Existe-t-il un moyen pour Mongoid d'utiliser un entier (nombre) comme identifiant par défaut plutôt qu'une valeur de hachage longue ?

Je veux juste avoir une caractéristique par défaut d'ActiveRecord qui utilise des entiers incrémentaux comme id pour réduire la longueur de l'url.

Par exemple, le premier article créé aura une url comme "app.com/articles/1" qui est par défaut dans ActiveRecord.

Existe-t-il une gemme qui supporte cela dans Mongoid ?

6voto

theTRON Points 6421

Vous pouvez toujours générer des jetons uniques plus courts pour identifier chacun de vos enregistrements (comme alternative au slugging), puisque votre objectif est simplement de réduire la longueur de l'URL.

J'ai récemment (aujourd'hui) écrit un bijou - mongoid_token qui devrait faciliter la création de jetons uniques pour vos documents Mongoid. Il ne les générera pas séquentiellement, mais il devrait vous aider à résoudre votre problème (je l'espère !).

3voto

daekrist Points 858

Vous pouvez essayer quelque chose comme ça :

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

Je n'ai pas essayé cette approche exactement (en l'utilisant avec des identifiants internes), mais je suis presque sûr que cela devrait fonctionner. Regardez mon application ici : https://github.com/daekrist/Mongologue J'ai ajouté un identifiant "visible" appelé pid à mes modèles de messages et de commentaires. J'utilise également l'identifiant textuel pour le modèle Tag.

2voto

Roman Points 7430

AFAIK, ce n'est pas possible par conception : http://groups.google.com/group/mongoid/browse_thread/thread/b4edab1801ac75be

L'approche adoptée par la communauté consiste donc à utiliser des limaces : https://github.com/crowdint/slugoid

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X