2010-09-26 19 views
9

Je suis tout à fait nouveau à Rails3, j'ai fondamentalement créé un échafaudage subscribers, je veux seulement mon application pour répondre aux actions new et create.Substitution d'une route de ressource vers/(racine) dans Rails3: ne pas modifier l'aide de chemin?

Ainsi, dans config/routes.rb je définis:

 
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, est donc ici ce que j'ai fait:

 
match '/' => "subscribers#new" 
match '/' => "subscribers#create" 
match '/' => "subscribers#thankyou" 
resources :subscribers, :only => [:new, :create] 

Ce qui fonctionne en quelque sorte, mais il est sans doute pas la plus aride chose: voici les questions que j'ai:

  1. Lorsque vous revenez à la forme après un problème sur créer le navigateur affiche l'URL /subscribers au lieu de simplement /, la forme est créé en utilisant la méthode d'aide form_for(@subscriber), de sorte que l'aide path doit être en quelque sorte pas affecté par la route
  2. Idéalement, je ne veux même pas l'application pour répondre à une demande /subscribers
  3. J'ai remarqué un bug bizarre, lors de la publication de la forme lorsque déconnecté (à partir de /, puis faire un rafraîchissement lorsque la connectio n revient (le navigateur demande la resubmitting => OK), l'application Rails se bloque (je n'ai pas la pile d'erreur car elle était en production), pourquoi?

Aussi, je l'ai essayé de mettre 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 c'est quelque chose de très simple, s'il vous plaît aider!

+0

Vous conventions de combat, et il va toujours être une bataille difficile. Je m'interrogerais fortement sur la raison pour laquelle je ne veux pas que votre application réponde à/abonnés et utilise/pour 2 ou 3 actions différentes. Vous devriez repenser votre architecture. –

+0

Hé bjeanes, je ne veux pas me battre pour les conventions, c'est une liste de diffusion pour un site "bientôt" bientôt disponible, donc à peu près la seule chose là-bas, je pense qu'il y a un moyen facile de mettre la ressource à /? –

Répondre

19

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 :)

0

Pour le numéro 2 dans la liste, supprimer cette ligne, et réécrire les méthodes de _PATH ou _url dans votre erb:

resources :subscribers, :only => [:new, :create] 
3

Vous pouvez faire

resources :subscribers, :path => '' 

et assurez-vous que GET / est d'être servi par votre modèle racine, par exemple en ajoutant à ce SubscribersController:

def index 
    render 'welcome/index' 
    end 

J'ai expérimenté avec l'aide d'une déclaration match "/" pour remplacer l'action index des ressources et la carte à un autre contrôleur à la place, mais apparemment une déclaration resources est toujours primordial pleinement déclaré manuellement les routes.