2012-01-09 12 views
7

Ho cercato e cercato e non riesco a trovare una pagina che spieghi la sintassi di routes.rb in Rails 3. Ci sono linee guida, panoramiche, anche esempi avanzati ma perché non c'è una pagina che spiega la sintassi esatta di ogni parola chiave ?? Questa paginaRails route.rb syntax

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

contiene un sacco di esempi avanzati, ma non prende il tempo per discutere il comportamento di tutti gli esempi forniti. Lo apprezzerei se qualcuno potesse indicarmi una pagina che rompesse la sintassi di routes.rb.

Ecco il problema che sto cercando di risolvere. Ho due modelli modello A e modello B. La relazione è modelA has_many modelB e modelB appartiene_alla modelA. Ho creato il controller per modelB sotto namespace di modelA. Così nella mia cartella rotaie app, ho

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

voglio che i miei percorsi di essere in quanto tale:

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

ho provato quanto segue in routes.rb e nessuno di esso funziona:

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' 

So che alcune delle cose che ho provato sono ovviamente sbagliate ma quando hai passato 2 giorni su un singolo problema, tutto va bene!

+0

Hai provato guide delle rotaie su il routing? http://guides.rubyonrails.org/routing.html – leonardoborges

risposta

0

Il motivo per cui nessuno ha una guida "definitiva" sulla sintassi del routing è che è abbastanza flessibile, quindi è possibile scrivere alcuni capitoli solo su quell'oggetto. Tuttavia, mi sento di raccomandare: http://guides.rubyonrails.org/routing.html

Dalla tua domanda, sembra che tu stai namespacing modelB sotto modelA ma si vuole anche il id per modelA di essere all'interno del percorso stesso.

Così, se il ModelBController sembra qualcosa di simile:

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

allora si può solo fare:

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

Tuttavia, sei sicuro di voler namespace il controller del genere? Se si desidera solo risorse nidificate come una tipica relazione has_many, non è necessario essere il namespace modelB in modelA.

Invece, dovreste:

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

E il controller modelB sarebbe:

class ModelBController < ApplicationController 
    # controller code here 
end 

allora si potrebbe fare

resources :modelA do 
    resources :modelB 
end 
+1

Grazie !! Davvero non ho creato intenzionalmente modelB sotto modelA. Stavo cercando di capire come nidificare le risorse in modo che 'http: // myserver/modelB' non sia accessibile ed è accessibile solo tramite' http: // myserver/modelA /: modelA_id/modelB' e da qualche parte qualcuno ha raccomandato di usare ' rails genera controller modelA/modelB'.Mi rendo conto ora che dovrei raggiungere il mio obiettivo originale usando le rotte e non mirando ai controllori. Puoi dire che sono un principiante. Detto questo, in quale situazione è consigliabile lo scope ?? – pvenky

+0

Il namespace dei controller è più per organizzarli ed è solo una questione di preferenza. Aggiunge un po 'più di complessità al routing che probabilmente non è necessario in questo momento. Consiglierei di rimanere con il semplice percorso di risorse annidate. – iwasrobbed