Rails RESTE de routage: les points de la ressource ID de l'élément
J'ai de la suite dans mes itinéraires.rb:
resources :users, :except => [:new, :create] do
get 'friends', :as => :friends, :on => :member, :to => "users#friends"
end
et à la suite dans mon utilisateur.rb:
def to_param
self.login
end
Et quand, par exemple, utilisateur avec des points de connexion (par exemple, 'la.chose") vient de facebook, rails donne erreur de routage (aucun itinéraire n'a été trouvé, je suppose que c'est parce qu'il reconnaît rien après le point comme un format ou à cause de la route des contraintes). Comment puis-je venir cette erreur?
- double possible de Rails — Params avec "dot" (par ex. /google.com)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez remplacer les périodes avec un autre personnage:
MODIFIER
Vous avez raison, cela ne parvient pas à faire face unique avec les connexions de la carte de la même valeur. Peut-être une meilleure façon est d'utiliser segment des contraintes de la route:
Cela devrait permettre
"/users/bart-simpson"
et/users/bart.simpson"
pour générer:id => "bart-simpson"
et:id => "bart.simpson"
respectivement. Vous devez modifier la regex pour ajouter tous les caractères acceptables pour l'URL.Noter que ceci est mentionné dans le Rails De Guide De Routage, section 3.2:
self
où il n'est pas nécessaire, mais ce n'est pas vraiment pertinente.La suite de limiter la définition de permis de la dot dans id ainsi que n'importe quel caractère sauf slash.
Formats pris en charge doit être explicitement défini (ici .html et .json) pour ne pas être pris par id.
Qui limitent la définition est travaillé avec des Rails 3.1
Pour les anciens Rails de versions, vous devrez peut-backport look-ahead soutien dans regin gem (c'est vendored sur rack-mount gem)
:constraints => {:id => /[^\/]+(?=#{ ActionController::Renderers::RENDERERS.map{|e| "\\.#{e}\\z"}.join("|") })|[^\/]+/}
Pour permettre à l'
:id
segment de contenir n'importe quel caractère sauf'/'
:Il écrit d'ailleurs dans une des réponses, mais c'est de l'OMI, de la façon la plus simple.