Redéfinition une route de ressource / (racine) dans Rails3: ne pas changer l'aide du chemin?
-
05-10-2019 - |
Question
Je suis tout à fait nouveau pour Rails3, je essentiellement créé un échafaudage subscribers
, je veux que mon application pour répondre aux actions de new
et create
.
Donc config/routes.rb
je définissais:
resources :subscribers, :only => [:new, :create]
Ce qui fonctionne de cette façon
GET /subscribers => subscribers#new POST /subscribers => subscribers#create
Maintenant, je veux que mon application pour exposer les ressources abonnés à /
(root) au lieu de /subscribers
, voici donc ce que je faisais:
match '/' => "subscribers#new" match '/' => "subscribers#create" match '/' => "subscribers#thankyou" resources :subscribers, :only => [:new, :create]
Ce qui fonctionne en quelque sorte, mais probablement pas la chose plus sec: voici les questions que je:
- Lorsque vous revenez à la forme après un problème sur créer le navigateur affiche l'URL de
/subscribers
au lieu de simplement/
, la forme est créée en utilisant la méthode d'aide deform_for(@subscriber)
, de sorte que l'assistantpath
doit être en quelque sorte pas affecté par la route - Idéalement, je ne veux même pas l'application pour répondre à une demande
/subscribers
- j'ai remarqué un bug étrange, lorsque l'affichage de la forme tout en étant déconnecté (de
/
, puis faire un rafraîchissement lorsque la connexion est de retour (navigateur demander resoumettre => OK), les plantages d'applications Rails (je n'ai pas pile d'erreur mais que cela était sur la production), pourquoi?
En outre, j'ai essayé d'installer la route de cette façon:
resources :subscribers, :only => [:new, :create] do collection do post '/' => :create get '/' => :new end end
Ce qui est probablement Sécheuse, mais il ne fixe pas de ces questions.
Je suis sûr que cela est quelque chose de très simple, s'il vous plaît aider!
La solution
Merci pour vos réponses, il m'a aidé à trouver la solution exacte à ma question:
resources :subscribers, :only => [:new, :create], :path => '', :path_names => {:new => ''}
testé et fonctionnel sur Rails 3:)
Autres conseils
Vous pouvez faire
resources :subscribers, :path => ''
et assurez-vous que GET /
est servi par votre modèle de racine, par exemple en ajoutant à ce SubscribersController:
def index
render 'welcome/index'
end
J'ai expérimenté avec l'aide d'une déclaration de match "/"
pour remplacer l'action index des ressources et la carte à un autre contrôleur à la place, mais apparemment une déclaration de resources
est toujours complètement les routes de la substitution déclarées manuellement.
Pour le numéro 2 dans la liste, supprimer cette ligne, et réécrire toutes les méthodes de _PATH ou _url dans votre erb:
resources :subscribers, :only => [:new, :create]