2012-01-09 16 views
7

He buscado y buscado y no puedo encontrar una página que describa la sintaxis de routes.rb en Rails 3. Hay directrices, resúmenes, incluso ejemplos avanzados, pero ¿por qué no hay una página que explica la sintaxis exacta de cada palabra clave? Esta páginaRails routes.rb sintaxis

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

contiene una gran cantidad de ejemplos avanzadas, pero no se toma el tiempo para discutir el comportamiento de todos los ejemplos dados. Agradecería que alguien me señale una página que descompone la sintaxis de routes.rb.

Aquí está el problema que estoy tratando de resolver. Tengo dos modelos modeloA y modeloB. La relación es modeloA tiene_muy modeloB y modeloB pertenece_ a modeloA. Creé el controlador para el modelo B debajo del espacio de nombres de la modeloA. Así que en mi carpeta de rieles aplicación, tengo

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

Quiero que mis rutas sean como tal:

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

He intentado lo siguiente en routes.rb y nada de esto funciona:

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' 

Sé que algunas de las cosas que probé obviamente son incorrectas, pero cuando pasaste 2 días en un solo problema, ¡todo vale!

+0

¿Ha intentado guías de los rieles en enrutamiento? http://guides.rubyonrails.org/routing.html – leonardoborges

Respuesta

0

La razón por la que nadie tiene una guía "definitiva" sobre la sintaxis de enrutamiento es que es bastante flexible, por lo que probablemente podría escribir algunos capítulos sobre ese tema. Sin embargo, yo recomendaría: http://guides.rubyonrails.org/routing.html

Desde su pregunta, que suena como si estuviera bajo namespacing modelBmodelA pero también quiere que el id para modelA a estar dentro de la ruta en sí.

Así que si su ModelBController se ve algo como:

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

a continuación, sólo puede hacer:

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

Sin embargo, está seguro de que quiere namespace el controlador de esa manera? Si solo desea recursos anidados como una relación típica de has_many, no necesita tener el espacio de nombres modelB en modelA.

lugar, habría que:

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

Y su controlador modelB sería:

class ModelBController < ApplicationController 
    # controller code here 
end 

entonces usted podría hacer

resources :modelA do 
    resources :modelB 
end 
+1

¡Gracias! Realmente no creé intencionalmente el modelo B en la modelo A. Estaba intentando averiguar cómo anidar recursos para que 'http: // myserver/modelB' no sea accesible y solo se puede acceder a través de' http: // miservidor/modeloA /: modeloA_id/modeloB' y en algún lugar alguien me recomendó ' los rieles generan el modelo de controlador A/modelo B'.Ahora me doy cuenta de que debería lograr mi objetivo original utilizando rutas y no explorando los controladores. Puedes decir que soy un novato. Dicho esto, ¿en qué situación se recomienda el alcance? – pvenky

+0

El espaciado de nombres de los controladores es más para organizarlos y es solo una cuestión de preferencia. Simplemente agrega un poco más de complejidad a la ruta que probablemente no necesite en este momento. Yo recomendaría quedarme con la ruta simple de recursos anidados. – iwasrobbed

Cuestiones relacionadas