Definir rutas en una aplicación de Rails con New Resources – RESTful Route Customizations


Rail Hace poco escribía sobre cómo poder definir nuestras propias rutas en Rails y veíamos algunas como collection y members, en la que hablábamos de:

No estamos limitados a las siete rutas de index, create, new, show, update, edit y destroy  que RESTful crea de forma predeterminada, sino que es posible añadir rutas adicionales que se aplican a una colección o los miembros individuales de la colección. Para ello tenemos member y collection.

Vemos el siguiente ejemplo para entender bien member y collection:

resources :posts do
       member do
             get :status
             put :update_status
       end
      collection do
          get :search
          post :new_search
          get :show_search
      end
end

Como podemos observar estamos utilizando resources para obtener las rutas que nos proporciona resources propiamente dichas y que hemos hablado anteriormente. Por otro lado tenemos un member de bloque con un método get y otro put que actúa sobre un elemento (por eso vemos el :id), arrojando los helpers y las rutas:

status_post GET                  /posts/:id/status(.:format)                    {:action=>”status”, :controller=>”posts”}
update_status_post PUT   /posts/:id/update_status(.:format)      {:action=>”update_status”, :controller=>”posts”}

Los colletion actúan sobre las colecciones de elementos proporcionando igualmente los helpers y rutas de acceso:

search_posts GET               /posts/search(.:format)                  {:action=>”search”, :controller=>”posts”}

new_search_posts POST   /posts/new_search(.:format)         {:action=>”new_search”, :controller=>”posts”}

show_search_posts GET    /posts/show_search(.:format)       {:action=>”show_search”, :controller=>”posts”}

Pero también tenemos el tercero que es new, menos conocida o utilizada, no sabría bien que adjetivo ponerle, para los casos en el que el sistema de enrutamiento tiene una sintaxis para poder especificar las rutas que sólo se aplican a los nuevos recursos, los que no se han guardado todavía.

Vemos esta última cómo podemos definirla. Todo parte de una pregunta que puse en el IRC, que tenemos en ASPgems para todo este tipo de cosas, dudas, curiosidades, cómo hacer de una determinada cosa que te suena un poco extraña, yo lo veo una herramienta muy potente para enseñar, adquirir conocimiento y ayudar a otros, es decir, una forma de poder intercambiar ideas, contrastarlas o sacarte de dudas como es este caso, ayudar a otros, entrenarte, mantenerte vivo, etc. La verdad es que este estilo de trabajar estimula mucho.

Bueno pues el tema es que, curioseando en otros proyectos para poder ver cómo otros han hecho ciertas cosas y aprender, vi que en uno de los proyectos en el fichero de routes.rb, una parte que me llamo la atención y era que se definía un new, me llamo la atención y lo pregunté en el IRC. ¿Para qué podemos utilizar un recurso de este tipo? Pues principalmente para cuando necesitemos hacer una previsualización de un recurso que aún no lo tenemos creado:

resources :reports do
    new do
        post :preview
    end
end

El helper y la ruta de acceso nos queda así:

preview_new_reportPOST/reports/new/preview(.:format) {:action=>”preview”, :controller=>”reports”}

En la vista podríamos utilizarlo de la siguiente forma:

= form_for(report, :url => preview_new_report_path) do |f|

= f.submit “Preview”

Finalmente como resumen tenemos:

:member crea un path de la foma /:controller/:id/:my_method

:collection crea un path de la foma /:controller/:my_method

:new crea un path de la foma /:controller/:my_method/new

Un comentario en “Definir rutas en una aplicación de Rails con New Resources – RESTful Route Customizations

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s