2012-01-09 20 views
7

Mam wyszukiwane i wyszukiwane i nie mogę znaleźć strony, która pisze składni routes.rb w Rails 3. Istnieją wytyczne, przeglądy, nawet zaawansowane przykłady, ale dlaczego nie ma strony, która dokładnie określa składnię każdego słowa kluczowego ?? Ta stronaRails routes.rb syntax

http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

zawiera wiele zaawansowanych przykładów, ale nie trochę czasu, aby omówić zachowanie wszystkich podanych przykładów. Byłbym wdzięczny, gdyby ktoś mógł wskazać mi stronę, która łamie składnię routes.rb.

Oto problem, który próbuję rozwiązać. Mam dwa modele modelA i modelB. Relacja to modelA ma wiele modeliB i modelB belongs_to modelA. Stworzyłem kontroler dla modelu B w przestrzeni nazw modelA. Więc w moim katalogu szyn app, mam

app/controllers/modelA_controller.rb 
app/controllers/modelA/modelB_controller.rb 

Chcę moje szlaki być jako takie:

http://localhost:3000/modelA/:modelA_id/modelB/ [index] 
http://localhost:3000/modelA/:modelA_id/modelB/:modelB_id [show] 
etc. 

Próbowałem następujących w routes.rb i nic z tego nie działa:

resources :modelA do 
    resources :modelB 
end 
-- 
resources :modelA do 
    member do 
    resources :modelB 
    end 
end 
-- 
namespace :modelA do 
    resources :modelB 
end 
-- 
match '/modelA/:modelA_id/modelB/action', :to => '/modelA/modelB#action' 

Wiem, że niektóre z rzeczy, które wypróbowałem, są oczywiście błędne, ale kiedy spędziłeś 2 dni na jednym problemie, wszystko idzie!

+0

Czy próbowałeś prowadnice szyn na routing? http://guides.rubyonrails.org/routing.html – leonardoborges

Odpowiedz

0

Powodem, dla którego nikt nie ma "ostatecznego" przewodnika dotyczącego składni routingu, jest to, że jest dość elastyczny, więc prawdopodobnie mógłbyś napisać kilka rozdziałów na ten temat. Jednakże, polecam: http://guides.rubyonrails.org/routing.html

z twojego pytania, to brzmi jakbyś przestrzeni nazw modelB pod modelA ale także chcą id dla modelA się wewnątrz samej trasie.

Więc jeśli ModelBController wyglądał:

class ModelA::ModelBController < ApplicationController 
    # controller code here 
end 

następnie można po prostu zrobić:

resources :modelA do 
    resources :modelB, :module => :modelA 
end 

jednak jesteś pewien, że chcesz do przestrzeni nazw kontrolera takiego? Jeśli chcesz po prostu zagnieżdżone zasoby, takie jak typowa relacja has_many, nie musisz wykonywać przypisywania nazw pod modelB pod modelA.

Zamiast tego, trzeba:

/app 
    /controllers 
    /modelA 
     # some files 
    /modelB 
     # some files 

i kontroler modelB byłoby:

class ModelBController < ApplicationController 
    # controller code here 
end 

Następnie można zrobić

resources :modelA do 
    resources :modelB 
end 
+1

Dzięki! Naprawdę nie celowo utworzyć modelB w modelu A. Próbowałem dowiedzieć się, jak zagnieżdżać zasoby, aby 'http: // myserver/modelB' był niedostępny i był dostępny tylko przez' http: // mójserwer/modelA /: modelA_id/modelB' i gdzieś ktoś polecił użycie ' szyny generują kontroler modelA/modelB'.Zdaję sobie teraz sprawę, że powinienem osiągnąć mój pierwotny cel, korzystając z tras, a nie ograniczając zakres kontrolerów. Możesz powiedzieć, że jestem początkującym. To powiedziawszy, w jakiej sytuacji zaleca się ustalanie zakresu? – pvenky

+0

Nazwy takie jak w przypadku kontrolerów służą raczej do ich organizowania i są tylko kwestią preferencji. To po prostu dodaje trochę więcej komplikacji do routingu, którego prawdopodobnie już nie potrzebujesz. Polecam pobyt z prostą trasą zagnieżdżonych zasobów. – iwasrobbed