Rutas
Las rutas se definen en el archivo
config/routes.rb
.La ruta debe especificar:
- El verbo HTTP.
- El path.
- El controlador y el método (acción) que se van a encargar de procesar la petición que coincida.
Por ejemplo, la siguiente ruta:
get '/welcome/index', to: 'welcome#index'
tiene los siguientes elementos:
- Utiliza el verbo
GET
. - Utiliza el path
/welcome/index
- El método
index
del controladorwelcome_controller.rb
se va a encargar de procesar la acción.
Otras formas de definir la misma ruta son:
get '/welcome/index' => 'welcome#index'
get '/welcome/index' # Rails infiere el controlador y el método de la ruta
Al igual que con Sinatra es posible definir variables en las rutas que después podemos obtener el hash
params
. Por ejemplo:get '/hello/:name', to: "welcome#hello"
En el controlador utilizamos el hash
params
para obtener la variable :name
:class WelcomeController < ApplicationController
def hello
@name = params[:name]
end
end
Nota: Aunque en la vista también podemos acceder el hash
params
, en general se recomienda pasar la información a través variables de instancia.Es posible darle un nombre a cada ruta para no tener que usar el path (p.e.
/welcome/index
) en vínculos y redireccionamientos.El nombre se le da con la opción
as
como se muestra en el siguiente ejemplo:get '/welcome/index', to: 'welcome#index', as: "welcome"
De esa forma, ahora podemos utilizar el nombre seguido de
_path
o _url
(p.e. welcome_path
o welcome_url
).welcome_path # /welcome/index
welcome_url # http://localhost:3000/welcome/index
En general utiliza
_path
a menos de que estés compartiendo un link en correos o quieras mostrar el URL completo.Puedes usar el nombre de la ruta en vínculos así:
<a href="<%= welcome_path %>">Ir al Home</a>
De hecho Rails viene con un método de ayuda que vamos a ver más adelante llamado
link_to
que te permite crear vínculos de la siguiente forma:<%= link_to "Ir al home", welcome_path %>
Esta última es la forma en la que se recomienda hacer vínculos internos en la aplicación.
Si quieres ver una lista de todas las rutas de la aplicación puedes utilizar el comando
rails routes
desde la consola (o rake routes
si estás utilizando una versión de Rails menor a la 5):$ rails routes
Prefix Verb URI Pattern Controller#Action
welcome_index GET /welcome/index(.:format) welcome#index
El
Prefix
es el nombre de la ruta. Por defecto Rails le pone un nombre a la ruta así no hayamos utilizado as
.Last modified 4mo ago