To doprowadza mnie do szału! Mam dwa modele: Lion
i Cheetah
. Obaj dziedziczą po Wildcat
.Trasy, pomocniki ścieżki i STI w Rails 4.0
class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
Stosuje się tutaj STI.
Wszystkie są obsługiwane przez kontroler WildcatsController
. Tam mam before_filer
, aby uzyskać type
z wildcat z params[:type]
i wszystkich innych rzeczy do korzystania z właściwej klasy.
W moim routes.rb
, stworzyłem następujących trasach:
resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'
Jeśli teraz chcesz korzystać z pomocników ścieżki, które otrzymuję od tras (lions_path
, lion_path
, new_lion_path
, etc.), wszystko jest działa zgodnie z oczekiwaniami, z wyjątkiem ścieżek show
i new
. Na przykład lions_path
zwraca ścieżkę /lions
. Ścieżka new
zwraca /lions/new?type=Lion
. To samo dotyczy ścieżki show
. Kiedy próbuję wprowadzić /lions/new
do mojej domeny głównej, to poprawnie dodaje ona parametr typu w tle.
Moje pytanie brzmi, dlaczego Railsy dodają do adresu URL parametr type
, jeśli używam helpera ścieżki? A dlaczego tylko dla new
i show
?
Używam Rails 4.0.0 z Ruby 2.0 za pomocą świeżej aplikacji Rails.
O mój boże. To może być takie proste. Dzięki za szybką odpowiedź! Po prostu nie chciałem tworzyć kontrolerów dla każdego z modeli, ponieważ będzie ich wiele w przyszłości. Ale to rozwiązało! – Hiasinho
Moja przyjemność. To jest moc OOP :). Zwróć uwagę, że szablony będą "dzikimi kotami". Jeśli chcesz użyć własnego zdania Lwa na indeksie, po prostu dodaj pustą metodę indeksu w LionsController. Ale myślę, że ogólny pogląd może w większości przypadków przynieść wiele pracy. –
@Hiasinho, zapomnij dodać "singularize". To rozwiązanie ma niewielką zależność od ścieżki, ale powinieneś być w stanie go pokonać po zmianie ścieżki. –