2011-06-19 10 views
8

No pude encontrar nada aquí ni en ningún otro lugar que cubriera tanto restringir las rutas de un recurso como agregar rutas adicionales no RESTful en Rails 3. Probablemente sea muy simple, pero cada ejemplo o explicación que he encontrado aborda solo un caso, no ambos al mismo tiempo.Restringir rutas de recursos y agregar rutas adicionales no RESTful en Rails 3

He aquí un ejemplo de lo que he estado haciendo en los carriles 2:

map.resources :sessions, :only => [:new, :create, :destroy], :member => {:recovery => :get}

Bastante sencillo, sólo queremos 3 de las 7 rutas REST debido a que los otros no tienen ningún sentido para este recurso, pero también queremos agregar otra ruta que se utiliza en la recuperación de la cuenta.

Ahora Por lo que sé hacer cualquiera de estas cosas es muy sencillo así:

resources :sessions, :only => [:new, :create, :destroy]

Al igual que en los carriles 2. Y:

resources :sessions do 
    member do 
    get :recovery 
    end 
end 

Entonces, ¿cómo hacer yo combinar estos dos? ¿Puedo seguir usando la antigua forma de Rails 2 de hacer esto? ¿Hay una forma preferida de hacer esto en Rails 3?

Respuesta

15

Puede pasar argumentos y un bloque de resources:

resources :sessions, :only => [:new, :create, :destroy] do 
    get :recovery, :on => :member 
end 

y probarlo con rake routes.

+0

Mi '' routes.rb' declara: recursos, cosa única: => [: show] obtienen en: foo,: ON =>: end' miembro, y '' rastrillos routes' da foo_thing GET /thing/foo(.:format) thing # foo' plus 'thing GET /thing(.:format) thing # show'. El enlace a 'thing' funciona, pero si el código navega para vincular' foo_thing', obtengo una pantalla Rails "Routing Error" que dice 'No route matches [GET]"/foo_thing "' - aunque escribo '. ../ thing/foo' en la barra de URL, funciona. (La ruta 'foo_thing' funciona desde dentro del código solo si' routes.rb' tiene la línea 'get 'foo_thing' => 'thing # foo''). ¿Alguna idea sobre lo que estoy haciendo mal? –

+0

Expandí mi pregunta anterior y escribí [esta pregunta] (http://stackoverflow.com/questions/17597382/helper-path-generated-by-rails-based-on-a-custom-rest-method-fails), entonces si tienes una respuesta, ¿podrías ir a ella? Kthxbye. –

5

Se debe trabajar más o menos como esta

resources :sessions, :only => [:new, :create, :destroy] do 
    member do 
    get :recovery 
    end 
end 

Hay una forma aún más corto, según lo propuesto por coreyward.

Compruebe las guías de rieles, "Rails Routing from the Outside In". También puedo recomendar "The Rails 3 Way" de Obie Fernandez, que obtuvo 2 capítulos bastante buenos sobre Enrutamiento y REST.

Saludos

+0

Tiene un error tipográfico en "recursos". ;) – coreyward

+0

Quite la coma antes del 'do' al final de la primera línea, y esto será correcto. –

Cuestiones relacionadas