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
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.
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
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
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.
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