2011-02-16 4 views
27

podać, że mam model o nazwie Apple i ma kontroler ApplesController, trasy są:Jak zmienić nazwy tras REST w adresie URL?

resources :apples 

    apples GET /apples (.:format)   {:controller=>"apples ", :action=>"index"} 
    new_apple GET /apples /new(.:format)  {:controller=>"apples ", :action=>"new"} 
edit_apple GET /apples /:id/edit(.:format) {:controller=>"apples ", :action=>"edit"} 

chciałbym zachować cały kod to samo, tyle że w adresach URL, w „jabłko” zostanie zastąpiony samochodem". Adres URL: /apples/new stanie się /cars/new.

Czy jest jakiś sposób, aby to zrobić, nie dotykając żadnego innego kodu w aplikacji? (Tj wewnętrznie w aplikacji, to wciąż apple i ApplesController)

Próbowałem :as opcję:

resources :apples, :as => "cars" 

    cars GET /apples (.:format)   {:controller=>"apples ", :action=>"index"} 
    new_car GET /apples /new(.:format)  {:controller=>"apples ", :action=>"new"} 
edit_car GET /apples /:id/edit(.:format) {:controller=>"apples ", :action=>"edit"} 

Ale to tylko zmienił "name" z trasy, a nie adres URL (tak new_apple_path stał new_car_path, ale new_car_path nadal wskazuje /apples/new zamiast /cars/new)

Odpowiedz

59

Co chcesz zrobić, to przekazać w opcji :path

resources :apples, :path => "cars"

to zastąpienie wszystkich odniesień trasy z /apples do /cars

Apostolskiej: http://guides.rubyonrails.org/routing.html sekcja 4.7 Przekładanie Ścieżki

+1

Tylko dla kompletności, w Railsach 2.3 byłby: 'resources: apples,: as =>" cars "' –

+1

Jestem nowy dla Rails (4), ale jak tylko zmienia pomocników trasy. Wygenerowane adresy URL nie ulegają zmianie. : path => "xxx" zmienia adresy URL – luigi7up

1

Dla tych, którzy szukają tylko zmienić nazwę część metody pomocnika:

resources :apples, as: "cars" 

Tzn. to zastąpiłoby apples_path z cars_path, ale nadal używa tego samego kontrolera/akcji.