> For the complete documentation index, see [llms.txt](https://makeitrealcamp.gitbook.io/ruby-on-rails-5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://makeitrealcamp.gitbook.io/ruby-on-rails-5/2-rutas.md).

# Rutas

Las rutas se definen en el archivo `config/routes.rb`.

Cada ruta está compuesta por los siguientes elementos:

* 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:

```ruby
get '/pages/home', to: 'pages#home'
```

* Utiliza el verbo `GET`.
* Utiliza el path `/pages/home`
* El método `home` del controlador `pages_controller.rb` se va a encargar de procesar la acción.

Las siguientes son otras dos formas en que puedes definir la misma ruta:

```ruby
get '/pages/home' => 'pages#home'
get '/pages/home' # Rails infiere el controlador y el método de la ruta
```

## Variables de path

Es posible definir variables en el path de la ruta para crear "rutas dinámicas". Por ejemplo, la siguiente ruta utiliza una variable llamada `:name` para coincidir con cualquier path que tenga la estructura `/hello/<cualquier_cadena>`:

```ruby
get '/hello/:name', to: "pages#hello"
```

En el controlador utilizamos el hash `params` para obtener el valor de la variable `:name`:

```ruby
class PagesController < 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**.

## Nombrando las rutas

Es posible darle un nombre a cada ruta para no tener que usar el path (p.e. `/pages/home`) en vínculos y redireccionamientos.

El nombre se le da con la opción `as` como se muestra en el siguiente ejemplo:

```ruby
get '/pages/home', to: 'pages#home', as: "home"
```

De esa forma, ahora podemos utilizar el nombre seguido de `_path` o `_url` (p.e. `home_path` o `home_url`).

```ruby
home_path # /pages/home
home_url  # http://localhost:3000/pages/home
```

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="<%= home_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", home_path %>
```

Esta última es la forma en la que se recomienda hacer vínculos internos en la aplicación.

## Listando las rutas

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
pages_home   GET    /pages/home(.:format)   pages#home
```

El `Prefix` es el nombre de la ruta. Por defecto Rails le pone un nombre a la ruta así no hayamos utilizado `as`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://makeitrealcamp.gitbook.io/ruby-on-rails-5/2-rutas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
