2010-09-26 4 views
9

Ich bin ziemlich neu in Rails3, ich habe im Grunde ein subscribers Gerüst, ich möchte nur meine App auf new und create Aktionen reagieren.Überschreiben einer Ressourcenroute nach/(root) in Rails3: den Pfadhelfer nicht ändern?

So in config/routes.rb I definiert:

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

Welche so funktioniert

 
GET /subscribers => subscribers#new 
POST /subscribers => subscribers#create 

Jetzt habe ich meine App, die Abonnenten Ressourcen bei / (root) statt /subscribers, also hier zeigen wollen, ist Was ich getan habe:

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

Welche funktioniert irgendwie, aber es ist wahrscheinlich nicht die trockenste Sache: hier sind die Themen, die ich habe:

  1. Wenn die Form nach einem Problem auf einer den Browser erstellen zurück zeigt die /subscribers URL statt nur /, die Form ich auf /subscribers
  2. irgendwie nicht betroffen sein muss, auf eine Anfrage nicht einmal die App reagieren soll ich einen seltsamen Fehler bemerkt, wenn die Buchung erstellt, um die form_for(@subscriber) Hilfsmethode verwenden, so dass die path Helfer von der Strecke
  3. Idealer Formular während der Verbindung getrennt (von /, und dann eine Aktualisierung durchführen, wenn die Verbindung n kommt zurück (Browser fragt nach Wiedervorlage => OK), die Rails-App stürzt ab (ich habe aber keinen Fehler-Stack, da dies bei der Produktion war), warum ist das so?

Auch ich versuchte Einstellen der Route auf diese Weise nach oben:

 
resources :subscribers, :only => [:new, :create] do 
    collection do 
    post '/' => :create 
    get '/' => :new 
    end 
end 

die wahrscheinlich Dryer ist, aber es ist nicht eines dieser Probleme beheben.

Ich bin sicher, das ist etwas ganz einfaches, bitte helfen!

+0

Sie Konventionen kämpfen, und es wird immer ein harter Kampf sein. Ich würde den Grund dafür, dass Ihre App nicht auf die Abonnenten antworten und/oder zwei oder drei verschiedene Aktionen verwenden soll, in Frage stellen. Sie sollten Ihre Architektur überdenken. –

+0

Hey bjeanes, ich will keine Konventionen bekämpfen, es ist eine Mailing-Liste für eine "bald kommen" -Website, also so ziemlich das Einzige, ich denke, es gibt einen einfachen Weg, die Ressource zu setzen /? –

Antwort

19

Vielen Dank für Ihre Antworten, es hat mir geholfen, die exakte Lösung auf meine Frage zu finden:

resources :subscribers, :only => [:new, :create], :path => '', :path_names => {:new => ''}

Getestet und funktioniert auf Rails 3 :)

0

Für die Nummer 2 in der Liste, löschen Sie diese Zeile, und schreiben Sie alle _path oder _url Methoden in erb:

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

Sie

resources :subscribers, :path => '' 

tun konnte, und stellen Sie sicher, dass GET / ist sein von Ihrer Root-Vorlage, z durch das Hinzufügen dieser zu SubscribersController:

def index 
    render 'welcome/index' 
    end 

Ich experimentierte mit der Verwendung einer match "/" Erklärung der Ressourcenindex Aktion außer Kraft zu setzen und sie auf einem anderen Controller Karte stattdessen aber anscheinend eine resources Erklärung zwingenden immer vollständig erklärt manuell Routen.