2010-09-26 10 views
9

Jestem całkiem nowy dla Rails3, zasadniczo stworzyłem rusztowanie subscribers, chcę tylko, aby moja aplikacja odpowiadała na akcje new i create.Przesłanianie trasy zasobu do/(root) w Rails3: nie zmieniając helpera ścieżki?

Więc w config/routes.rb I zdefiniowane:

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

Który działa w ten sposób

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

teraz chcę moja aplikacja do pokazywania zasobów abonentów na / (root) zamiast /subscribers, więc tutaj jest co zrobiłem:

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

Które jakoś działa, ale nie jest chyba DRYest rzecz: oto kwestie mam:

  1. Kiedy wraca do formy po emisji na utworzenie przeglądarkę wyświetla /subscribers URL zamiast po prostu /, forma jest tworzona przy użyciu metody form_for(@subscriber) pomocnika, więc path pomocnik musi być w jakiś sposób wpływa drogą
  2. Idealnie I nawet nie chce aplikację w odpowiedzi na prośbę o /subscribers
  3. zauważyłem dziwny błąd, podczas księgowania Formularz jest rozłączany (od /, a następnie robi odświeżanie po podłączeniu n wraca (przeglądarka prosi o ponowne przesłanie => OK), aplikacja Railsowa zawiesza się (nie mam stosu błędów, jak to było w trakcie produkcji), dlaczego tak jest?

Również Próbowałem konfigurowania Trasa To sposób:

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

który jest prawdopodobnie włosów, ale to nie rozwiąże żadnego z tych problemów.

Jestem pewien, że to jest coś bardzo prostego, proszę o pomoc!

+0

Walczysz konwencje, i to zawsze będzie być bitwą pod górę. Bardzo wątpiłbym, dlaczego nie chcesz, aby Twoja aplikacja reagowała na/subskrybentów i używała/dla 2 lub 3 różnych działań. Powinieneś przemyśleć swoją architekturę. –

+0

Hej bjeanes, nie chcę walczyć z konwencjami, jest to lista mailingowa dla "wkrótce" strony internetowej, więc prawie jedyna rzecz, myślę, że istnieje łatwy sposób na umieszczenie zasobu w /? –

Odpowiedz

19

Dziękuję za odpowiedzi, to pomogło mi znaleźć dokładne rozwiązanie na moje pytanie:

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

Przetestowane i działa on Rails 3 :)

0

dla numeru 2 na liście, należy usunąć tę linię, a przepisać żadnych _path lub _url metod w swojej erb:

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

Można zrobić

resources :subscribers, :path => '' 

i upewnij się, że GET / jest bycie obsługiwany przez Twój szablon główny, np dodając do tego SubscribersController:

def index 
    render 'welcome/index' 
    end 

eksperymentowałem z zastosowaniem deklaracji match "/" zastąpić działanie wskaźnika zasobów i mapować do innego kontrolera zamiast ale widocznie oświadczenie resources jest zawsze w pełni nadrzędne ręcznie oświadczył tras.

Powiązane problemy