Mongo ids prowadzi do strasznych adresów URL

Może to zabrzmieć jak trywialne pytanie, ale jest to raczej ważne dla konsumentów stojących przed aplikacjami

Jaki jest najprostszy i najbardziej skalowalny sposób na mapowanie przerażającego identyfikatora mongo na Przyjazny identyfikator?

Xx.com/posts/4d371056183b5e09b20001f9

Do

Xx.com/posts/a

M

Author: Community, 2011-01-20

4 answers

Zdefiniuj przyjazne pole unikalne (jak ślimak) w Twojej kolekcji, indeksuj je, na twoim modelu, zdefiniuj to_param, aby je zwrócić:

def to_param
  slug
end

Następnie w wyszukiwarkach Znajdź według Sluga, a nie ID:

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

To pozwoli Ci traktować ślimaki jako skuteczne PK do celów interakcji z zasobami i są o wiele ładniejsze.

 21
Author: Chris Heald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-10 16:35:12

Możesz utworzyć klucz złożony w mongoid, aby zastąpić domyślny identyfikator za pomocą makra klucza:

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"

Jeśli nie podoba ci się ten sposób, sprawdź ten klejnot: https://github.com/hakanensari/mongoid-slug

 27
Author: kerberoS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-20 05:11:33

Niestety, makro klucza zostało usunięte z mongo. Dla identyfikatorów niestandardowych, użytkownicy muszą teraz nadpisać pole _id.

class Band
  include Mongoid::Document
  field :_id, type: String, default: ->{ name }
end
 8
Author: styliii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 02:59:59

Oto wielki klejnot, którego używam, aby skutecznie odpowiedzieć na ten problem: Mongoid-Slug

Https://github.com/digitalplaywright/mongoid-slug .

Zapewnia ładny interfejs do dodawania tej funkcji w wielu modelach. Jeśli wolisz toczyć własne, przynajmniej sprawdź ich realizację dla niektórych pomysłów. Jeśli idziesz tą drogą, zajrzyj do klejnotu Stringex, https://github.com/rsl/stringex , oraz biblioteki acts_as_url wewnątrz. Które pomogą ci uzyskać ładne ślimaki dash-between-url.

 4
Author: Glenn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-16 02:21:00