edge
Más en rubyonrails.org: Más Ruby on Rails

Ayudantes de Action View

Después de leer esta guía, sabrás:

1 Resumen de los ayudantes proporcionados por Action View

WIP: No todos los ayudantes se enumeran aquí. Para ver una lista completa, consulta la documentación de la API

Lo siguiente es solo un resumen breve de los ayudantes disponibles en Action View. Se recomienda que revises la documentación de la API, que cubre todos los ayudantes con más detalle, pero esto debería servir como un buen punto de partida.

1.1 AssetTagHelper

Este módulo proporciona métodos para generar HTML que enlaza vistas a activos como imágenes, archivos JavaScript, hojas de estilo y feeds.

Por defecto, Rails enlaza estos activos en el host actual en la carpeta pública, pero puedes indicarle a Rails que enlace los activos desde un servidor de activos dedicado configurando config.asset_host en la configuración de la aplicación, típicamente en config/environments/production.rb. Por ejemplo, supongamos que tu host de activos es assets.example.com:

config.asset_host = "assets.example.com"
image_tag("rails.png")
# => <img src="http://assets.example.com/images/rails.png" />

Devuelve una etiqueta de enlace que los navegadores y lectores de feeds pueden usar para detectar automáticamente un feed RSS, Atom o JSON.

auto_discovery_link_tag(:rss, "http://www.example.com/feed.rss", { title: "RSS Feed" })
# => <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://www.example.com/feed.rss" />

1.1.2 image_path

Calcula la ruta a un activo de imagen en el directorio app/assets/images. Las rutas completas desde la raíz del documento se pasarán. Se utiliza internamente por image_tag para construir la ruta de la imagen.

image_path("edit.png") # => /assets/edit.png

Se agregará una huella digital al nombre de archivo si config.assets.digest está configurado en true.

image_path("edit.png")
# => /assets/edit-2d1a2db63fc738690021fedb5a65b68e.png

1.1.3 image_url

Calcula la URL a un activo de imagen en el directorio app/assets/images. Esto llamará a image_path internamente y se fusionará con tu host actual o tu host de activos.

image_url("edit.png") # => http://www.example.com/assets/edit.png

1.1.4 image_tag

Devuelve una etiqueta de imagen HTML para la fuente. La fuente puede ser una ruta completa o un archivo que existe en el directorio app/assets/images.

image_tag("icon.png") # => <img src="/assets/icon.png" />

1.1.5 javascript_include_tag

Devuelve una etiqueta de script HTML para cada una de las fuentes proporcionadas. Puedes pasar el nombre de archivo (la extensión .js es opcional) de los archivos JavaScript que existen en tu directorio app/assets/javascripts para incluirlos en la página actual o puedes pasar la ruta completa relativa a la raíz de tu documento.

javascript_include_tag "common"
# => <script src="/assets/common.js"></script>

1.1.6 javascript_path

Calcula la ruta a un activo de JavaScript en el directorio app/assets/javascripts. Si el nombre de archivo de origen no tiene extensión, se agregará .js. Las rutas completas desde la raíz del documento se pasarán. Se utiliza internamente por javascript_include_tag para construir la ruta del script.

javascript_path "common" # => /assets/common.js

1.1.7 javascript_url

Calcula la URL a un activo de JavaScript en el directorio app/assets/javascripts. Esto llamará a javascript_path internamente y se fusionará con tu host actual o tu host de activos.

javascript_url "common"
# => http://www.example.com/assets/common.js

Devuelve una etiqueta de enlace de hoja de estilo para las fuentes especificadas como argumentos. Si no especificas una extensión, se agregará automáticamente .css.

stylesheet_link_tag "application"
# => <link href="/assets/application.css" rel="stylesheet" />

1.1.9 stylesheet_path

Calcula la ruta a un activo de hoja de estilo en el directorio app/assets/stylesheets. Si el nombre de archivo de origen no tiene extensión, se agregará .css. Las rutas completas desde la raíz del documento se pasarán. Se utiliza internamente por stylesheet_link_tag para construir la ruta de la hoja de estilo.

stylesheet_path "application" # => /assets/application.css

1.1.10 stylesheet_url

Calcula la URL a un activo de hoja de estilo en el directorio app/assets/stylesheets. Esto llamará a stylesheet_path internamente y se fusionará con tu host actual o tu host de activos.

stylesheet_url "application"
# => http://www.example.com/assets/application.css

1.2 AtomFeedHelper

1.2.1 atom_feed

Este ayudante facilita la construcción de un feed Atom. Aquí tienes un ejemplo de uso completo:

config/routes.rb

resources :articles

app/controllers/articles_controller.rb

def index
  @articles = Article.all

  respond_to do |format|
    format.html
    format.atom
  end
end

app/views/articles/index.atom.builder

atom_feed do |feed|
  feed.title("Articles Index")
  feed.updated(@articles.first.created_at)

  @articles.each do |article|
    feed.entry(article) do |entry|
      entry.title(article.title)
      entry.content(article.body, type: 'html')

      entry.author do |author|
        author.name(article.author_name)
      end
    end
  end
end

1.3 BenchmarkHelper

1.3.1 benchmark

Te permite medir el tiempo de ejecución de un bloque en una plantilla y registra el resultado en el registro. Envuelve este bloque alrededor de operaciones costosas o posibles cuellos de botella para obtener una lectura de tiempo para la operación. html+erb <% benchmark "Procesar archivos de datos" do %> <%= expensive_files_operation %> <% end %>

Esto agregaría algo como "Procesar archivos de datos (0.34523)" al registro, que luego puedes usar para comparar los tiempos al optimizar tu código.

1.4 CacheHelper

1.4.1 cache

Un método para almacenar en caché fragmentos de una vista en lugar de una acción o página completa. Esta técnica es útil para almacenar en caché piezas como menús, listas de temas de noticias, fragmentos de HTML estáticos, etc. Este método toma un bloque que contiene el contenido que deseas almacenar en caché. Consulta AbstractController::Caching::Fragments para obtener más información.

<% cache do %>
  <%= render "shared/footer" %>
<% end %>

1.5 CaptureHelper

1.5.1 capture

El método capture te permite extraer una parte de una plantilla en una variable. Luego puedes usar esta variable en cualquier lugar de tus plantillas o diseño.

<% @greeting = capture do %>
  <p>Bienvenido! La fecha y hora es <%= Time.now %></p>
<% end %>

La variable capturada luego se puede usar en cualquier otro lugar.

<html>
  <head>
    <title>Bienvenido!</title>
  </head>
  <body>
    <%= @greeting %>
  </body>
</html>

1.5.2 content_for

Llamar a content_for almacena un bloque de marcado en un identificador para su uso posterior. Puedes hacer llamadas posteriores al contenido almacenado en otras plantillas o en el diseño pasando el identificador como argumento a yield.

Por ejemplo, supongamos que tenemos un diseño de aplicación estándar, pero también una página especial que requiere cierto JavaScript que el resto del sitio no necesita. Podemos usar content_for para incluir este JavaScript en nuestra página especial sin aumentar el tamaño del resto del sitio.

app/views/layouts/application.html.erb

<html>
  <head>
    <title>Bienvenido!</title>
    <%= yield :special_script %>
  </head>
  <body>
    <p>Bienvenido! La fecha y hora es <%= Time.now %></p>
  </body>
</html>

app/views/articles/special.html.erb

<p>Esta es una página especial.</p>

<% content_for :special_script do %>
  <script>alert('Hola!')</script>
<% end %>

1.6 DateHelper

1.6.1 distance_of_time_in_words

Informa la distancia aproximada en tiempo entre dos objetos Time o Date o enteros como segundos. Establece include_seconds en true si deseas aproximaciones más detalladas.

distance_of_time_in_words(Time.now, Time.now + 15.seconds)
# => menos de un minuto
distance_of_time_in_words(Time.now, Time.now + 15.seconds, include_seconds: true)
# => menos de 20 segundos

1.6.2 time_ago_in_words

Similar a distance_of_time_in_words, pero donde to_time está fijo en Time.now.

time_ago_in_words(3.minutes.from_now) # => 3 minutos

1.7 DebugHelper

Devuelve una etiqueta pre que tiene un objeto volcado por YAML. Esto crea una forma muy legible de inspeccionar un objeto.

my_hash = { 'first' => 1, 'second' => 'two', 'third' => [1, 2, 3] }
debug(my_hash)
<pre class='debug_dump'>---
first: 1
second: two
third:
- 1
- 2
- 3
</pre>

1.8 FormHelper

Los ayudantes de formulario están diseñados para facilitar el trabajo con modelos en comparación con el uso de elementos HTML estándar, proporcionando un conjunto de métodos para crear formularios basados en tus modelos. Este ayudante genera el HTML para los formularios, proporcionando un método para cada tipo de entrada (por ejemplo, texto, contraseña, selección, etc.). Cuando se envía el formulario (es decir, cuando el usuario hace clic en el botón de enviar o se llama a form.submit a través de JavaScript), las entradas del formulario se agruparán en el objeto params y se pasarán de vuelta al controlador.

Puedes obtener más información sobre los ayudantes de formulario en la Guía de ayudantes de formulario de Action View.

1.9 JavaScriptHelper

Proporciona funcionalidad para trabajar con JavaScript en tus vistas.

1.9.1 escape_javascript

Escapa los retornos de carro y las comillas simples y dobles para segmentos de JavaScript.

1.9.2 javascript_tag

Devuelve una etiqueta JavaScript que envuelve el código proporcionado.

javascript_tag "alert('Todo está bien')"
<script>
//<![CDATA[
alert('Todo está bien')
//]]>
</script>

1.10 NumberHelper

Proporciona métodos para convertir números en cadenas formateadas. Se proporcionan métodos para números de teléfono, moneda, porcentaje, precisión, notación posicional y tamaño de archivo.

1.10.1 number_to_currency

Formatea un número en una cadena de moneda (por ejemplo, $13.65).

number_to_currency(1234567890.50) # => $1,234,567,890.50

1.10.2 number_to_human

Imprime de forma legible (formatea y aproxima) un número para que sea más legible para los usuarios; útil para números que pueden ser muy grandes.

number_to_human(1234)    # => 1.23 Mil
number_to_human(1234567) # => 1.23 Millón

1.10.3 number_to_human_size

Formatea los bytes en tamaño en una representación más comprensible; útil para informar tamaños de archivo a los usuarios.

number_to_human_size(1234)    # => 1.21 KB
number_to_human_size(1234567) # => 1.18 MB

1.10.4 number_to_percentage

Formatea un número como una cadena de porcentaje. ruby number_to_percentage(100, precision: 0) # => 100%

1.10.5 number_to_phone

Formatea un número en un número de teléfono (por defecto, en Estados Unidos).

number_to_phone(1235551234) # => 123-555-1234

1.10.6 number_with_delimiter

Formatea un número con miles agrupados usando un delimitador.

number_with_delimiter(12345678) # => 12,345,678

1.10.7 number_with_precision

Formatea un número con el nivel de precision especificado, que por defecto es 3.

number_with_precision(111.2345)               # => 111.235
number_with_precision(111.2345, precision: 2) # => 111.23

1.11 SanitizeHelper

El módulo SanitizeHelper proporciona un conjunto de métodos para limpiar el texto de elementos HTML no deseados.

1.11.1 sanitize

Este helper de sanitize codificará en HTML todas las etiquetas y eliminará todos los atributos que no estén específicamente permitidos.

sanitize @article.body

Si se pasan las opciones :attributes o :tags, solo se permitirán los atributos y etiquetas mencionados y nada más.

sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style)

Para cambiar los valores predeterminados para múltiples usos, por ejemplo, agregar etiquetas de tabla a los valores predeterminados:

class Application < Rails::Application
  config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
end

1.11.2 sanitize_css(style)

Limpia un bloque de código CSS.

Elimina todas las etiquetas de enlace del texto y deja solo el texto del enlace.

strip_links('<a href="https://rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails
strip_links('emails to <a href="mailto:[email protected]">[email protected]</a>.')
# => emails to [email protected].
strip_links('Blog: <a href="http://myblog.com/">Visit</a>.')
# => Blog: Visit.

1.11.4 strip_tags(html)

Elimina todas las etiquetas HTML del html, incluidos los comentarios. Esta funcionalidad está impulsada por la gema rails-html-sanitizer.

strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!
strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more</a>")
# => Bold no more!  See more

NB: La salida aún puede contener caracteres '<', '>', '&' sin escapar y confundir a los navegadores.

1.12 UrlHelper

Proporciona métodos para crear enlaces y obtener URLs que dependen del subsistema de enrutamiento.

1.12.1 url_for

Devuelve la URL para el conjunto de options proporcionado.

1.12.1.1 Ejemplos
url_for @profile
# => /profiles/1

url_for [ @hotel, @booking, page: 2, line: 3 ]
# => /hotels/1/bookings/1?line=3&page=2

Enlaza a una URL derivada de url_for en el fondo. Se utiliza principalmente para crear enlaces de recursos RESTful, que para este ejemplo, se reduce a cuando se pasan modelos a link_to.

Ejemplos

link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>

También se puede usar un bloque si el destino del enlace no cabe en el parámetro de nombre. Ejemplo en ERB:

<%= link_to @profile do %>
  <strong><%= @profile.name %></strong> -- <span>¡Échale un vistazo!</span>
<% end %>

produciría:

<a href="/profiles/1">
  <strong>David</strong> -- <span>¡Échale un vistazo!</span>
</a>

Consulte la Documentación de la API para obtener más información

1.12.3 button_to

Genera un formulario que se envía a la URL pasada. El formulario tiene un botón de envío con el valor del name.

1.12.3.1 Ejemplos
<%= button_to "Sign in", sign_in_path %>

aproximadamente produciría algo como:

<form method="post" action="/sessions" class="button_to">
  <input type="submit" value="Sign in" />
</form>

Consulte la Documentación de la API para obtener más información

1.13 CsrfHelper

Devuelve las etiquetas meta "csrf-param" y "csrf-token" con el nombre del parámetro y el token de protección contra falsificación de solicitudes entre sitios, respectivamente.

<%= csrf_meta_tags %>

NOTA: Los formularios regulares generan campos ocultos, por lo que no utilizan estas etiquetas. Se pueden encontrar más detalles en la Guía de seguridad de Rails.

Comentarios

Se te anima a ayudar a mejorar la calidad de esta guía.

Por favor, contribuye si encuentras algún error tipográfico o factual. Para empezar, puedes leer nuestra contribución a la documentación sección.

También puedes encontrar contenido incompleto o desactualizado. Por favor, añade cualquier documentación faltante para main. Asegúrate de revisar Edge Guides primero para verificar si los problemas ya están resueltos o no en la rama principal. Consulta las Directrices de las Guías de Ruby on Rails para el estilo y las convenciones.

Si por alguna razón encuentras algo que corregir pero no puedes solucionarlo tú mismo, por favor abre un problema.

Y por último, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.