28 votes

Les identifiants Mongo conduisent à des URL effrayantes

Cela peut sembler une question triviale, mais c'est plutôt important pour les applications destinées aux consommateurs

Quelle est la manière la plus simple et la plus évolutive de mapper l'identifiant de la mongo effrayante sur un identifiant convivial?

xx.com/posts/4d371056183b5e09b20001f9

À

xx.com/posts/a

M

26voto

kerberoS Points 261

Vous pouvez créer une clé composite dans mongoid pour remplacer l'ID par défaut à l'aide de la macro de clé:

 class Person
  include Mongoid::Document
  field :first_name
  field :last_name
  key :first_name, :last_name
end

person = Person.new(:first_name => "Syd", :last_name => "Vicious")
person.id # returns "syd-vicious"
 

Si vous n'aimez pas cette façon de le faire, consultez ce joyau: https://github.com/hakanensari/mongoid-slug

19voto

Chris Heald Points 28814

Définissez un champ unique convivial (comme un slug) sur votre collection, indexez-le, sur votre modèle, définissez to_param pour le renvoyer:

 def to_param
  slug
end
 

Ensuite, dans vos moteurs de recherche, recherchez par slug plutôt que par ID:

 @post = Post.where(:slug => params[:id].to_s).first
 

Cela vous permettra de traiter les limaces comme votre PK efficace à des fins d'interaction avec les ressources, et elles sont beaucoup plus jolies.

7voto

styliii Points 494

Malheureusement, la macro clé a été supprimée de mongo. Pour les identifiants personnalisés, les utilisateurs doivent désormais remplacer le champ _id.

 class Band
  include Mongoid::Document
  field :_id, type: String, default: ->{ name }
end
 

4voto

Glenn Points 569

Voici un joyau que j'ai utilisé avec succès pour répondre à ce problème: Mongoid-Limace

https://github.com/hakanensari/mongoid-slug.

Il fournit une interface agréable pour l'ajout de cette fonctionnalité à travers de multiples modèles. Si vous préférez rouler votre propre, au moins s'assurer de leur mise en œuvre pour certaines idées. Si vous allez dans cette voie, regardez dans le Stringex gem, https://github.com/rsl/stringexet acts_as_url bibliothèque au sein. Qui sera vous aider à obtenir le bon dash-entre-url limaces.

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