Lo siguiente describe algunos de los helpers más comúnmente utilizados disponibles en Action View. Sirve como un buen punto de partida, pero también se recomienda revisar la Documentación API completa, ya que cubre todos los helpers con más detalle.
1 Formato
1.1 Fechas
Estos helpers facilitan la visualización de elementos de fecha y/o hora en formas contextuales legibles por humanos.
1.1.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 verdadero si quieres aproximaciones más detalladas.
distance_of_time_in_words(Time.current, 15.seconds.from_now)
# => menos de un minuto
distance_of_time_in_words(Time.current, 15.seconds.from_now, include_seconds: true)
# => menos de 20 segundos
NOTA: Usamos Time.current
en lugar de Time.now
porque devuelve la hora actual basada en la zona horaria establecida en Rails, mientras que Time.now
devuelve un objeto Time basado en la zona horaria del servidor.
Consulta la Documentación API de distance_of_time_in_words
para más información.
1.1.2 time_ago_in_words
Informa la distancia aproximada en tiempo entre un objeto Time
o Date
, o un entero en segundos, y Time.current
.
time_ago_in_words(3.minutes.from_now) # => 3 minutos
Consulta la Documentación API de time_ago_in_words
para más información.
1.2 Números
Un conjunto de 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.2.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
Consulta la Documentación API de number_to_currency
para más información.
1.2.2 number_to_human
Imprime de manera bonita (formatea y aproxima) un número para que sea más legible por los usuarios; útil para números que pueden llegar a ser muy grandes.
number_to_human(1234) # => 1.23 Mil
number_to_human(1234567) # => 1.23 Millón
Consulta la Documentación API de number_to_human
para más información.
1.2.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
Consulta la Documentación API de number_to_human_size
para más información.
1.2.4 number_to_percentage
Formatea un número como una cadena de porcentaje.
number_to_percentage(100, precision: 0) # => 100%
Consulta la Documentación API de number_to_percentage
para más información.
1.2.5 number_to_phone
Formatea un número en un número de teléfono (EE.UU. por defecto).
number_to_phone(1235551234) # => 123-555-1234
Consulta la Documentación API de number_to_phone
para más información.
1.2.6 number_with_delimiter
Formatea un número con miles agrupados usando un delimitador.
number_with_delimiter(12345678) # => 12,345,678
Consulta la Documentación API de number_with_delimiter
para más información.
1.2.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
Consulta la Documentación API de number_with_precision
para más información.
1.3 Texto
Un conjunto de métodos para filtrar, formatear y transformar cadenas.
1.3.1 excerpt
Dado un texto
y una frase
, excerpt
busca y extrae la primera ocurrencia de la frase
, más el texto circundante solicitado determinado por un radio
. Se antepone/añade un marcador de omisión si el inicio/fin del resultado no coincide con el inicio/fin del texto.
excerpt("Esta es una mañana muy hermosa", "muy", separator: " ", radius: 1)
# => ...una muy hermosa...
excerpt("Esto es también un ejemplo", "un", radius: 8, omission: "<cortar> ")
#=> <cortar> es también un ejemplo
Consulta la Documentación API de excerpt
para más información.
1.3.2 pluralize
Devuelve la forma singular o plural de una palabra basada en el valor de un número.
pluralize(1, "persona") # => 1 persona
pluralize(2, "persona") # => 2 personas
pluralize(3, "persona", plural: "usuarios") # => 3 usuarios
Consulta la Documentación API de pluralize
para más información.
1.3.3 truncate
Trunca un texto
dado a una longitud
dada. Si el texto es truncado, un marcador de omisión será añadido al resultado para una longitud total que no exceda longitud
.
truncate("Érase una vez en un mundo muy lejano")
# => "Érase una vez en un mundo..."
truncate("Érase una vez en un mundo muy lejano", length: 17)
# => "Érase una vez en..."
truncate("uno-dos-tres-cuatro-cinco", length: 20, separator: "-")
# => "uno-dos-tres..."
truncate("Y encontraron que muchas personas estaban durmiendo mejor.", length: 25, omission: "... (continuado)")
# => "Y encontraron... (continuado)"
truncate("<p>Érase una vez en un mundo muy lejano</p>", escape: false)
# => "<p>Érase una vez en un mu..."
Consulta la Documentación API de truncate
para más información.
1.3.4 word_wrap
Envuelve el texto en líneas no más largas que line_width
.
word_wrap("Érase una vez", line_width: 8)
# => "Érase\nuna vez\nen"
Consulta la Documentación API de word_wrap
para más información.
2 Formularios
Los helpers de formularios simplifican el trabajo con modelos en comparación con el uso de elementos HTML estándar solos. Ofrecen una gama de métodos adaptados para generar formularios basados en tus modelos. Algunos métodos corresponden a un tipo específico de entrada, como campos de texto, campos de contraseña, menús desplegables select, y más. Cuando se envía un formulario, las entradas dentro del formulario se agrupan en el objeto params y se envían de vuelta al controlador.
Puedes aprender más sobre los helpers de formularios en la Guía de Helpers de Formularios de Action View.
3 Navegación
Un conjunto de métodos para construir enlaces y URLs que dependen del subsistema de enrutamiento.
3.1 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 nombre
.
<%= button_to "Iniciar sesión", sign_in_path %>
generaría el siguiente HTML:
<form method="post" action="/sessions" class="button_to">
<input type="submit" value="Iniciar sesión" />
</form>
Consulta la Documentación API de button_to
para más información.
3.2 current_page?
Devuelve verdadero si la URL de la solicitud actual coincide con las opciones
dadas.
<% if current_page?(controller: 'profiles', action: 'show') %>
<strong>Actualmente en la página del perfil</strong>
<% end %>
Consulta la Documentación API de current_page?
para más información.
3.3 link_to
Enlaza a una URL derivada de url_for
bajo el capó. Es comúnmente utilizado para crear enlaces para recursos RESTful, especialmente cuando se pasan modelos como argumentos a link_to
.
link_to "Perfil", @profile
# => <a href="/profiles/1">Perfil</a>
link_to "Libro", @book # dado una clave primaria compuesta [:author_id, :id]
# => <a href="/books/2_1">Libro</a>
link_to "Perfiles", profiles_path
# => <a href="/profiles">Perfiles</a>
link_to nil, "https://example.com"
# => <a href="https://www.example.com">https://www.example.com</a>
link_to "Artículos", articles_path, id: "articles", class: "article__container"
# => <a href="/articles" class="article__container" id="articles">Artículos</a>
Puedes usar un bloque si tu objetivo de enlace no cabe en el parámetro de nombre.
<%= link_to @profile do %>
<strong><%= @profile.name %></strong> -- <span>¡Échale un vistazo!</span>
<% end %>
Generaría el siguiente HTML:
<a href="/profiles/1">
<strong>David</strong> -- <span>¡Échale un vistazo!</span>
</a>
Consulta la Documentación API de link_to
para más información.
3.4 mail_to
Genera una etiqueta de enlace mailto
a la dirección de correo electrónico especificada. También puedes especificar el texto del enlace, opciones HTML adicionales, y si deseas codificar la dirección de correo electrónico.
mail_to "john_doe@gmail.com"
# => <a href="mailto:john_doe@gmail.com">john_doe@gmail.com</a>
mail_to "me@john_doe.com", cc: "me@jane_doe.com",
subject: "Este es un correo electrónico de ejemplo"
# => <a href="mailto:"me@john_doe.com?cc=me@jane_doe.com&subject=Este%20es%20un%20correo%20electrónico%20de%20ejemplo">"me@john_doe.com</a>
Consulta la Documentación API de mail_to
para más información.
3.5 url_for
Devuelve la URL para el conjunto de opciones
proporcionadas.
url_for @profile
# => /profiles/1
url_for [ @hotel, @booking, page: 2, line: 3 ]
# => /hotels/1/bookings/1?line=3&page=2
url_for @post # dado una clave primaria compuesta [:blog_id, :id]
# => /posts/1_2
4 Sanitización
Un conjunto de métodos para limpiar texto de elementos HTML no deseados. Los helpers son particularmente útiles para ayudar a asegurar que solo HTML/CSS seguro y válido se renderice. También puede ser útil para prevenir ataques XSS escapando o eliminando contenido potencialmente malicioso de la entrada del usuario antes de renderizarlo en tus vistas.
Esta funcionalidad es impulsada internamente por la gema rails-html-sanitizer.
4.1 sanitize
El método 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 los atributos y etiquetas mencionados están permitidos 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, agregando etiquetas de tabla al predeterminado:
# config/application.rb
class Application < Rails::Application
config.action_view.sanitized_allowed_tags = %w(table tr td)
end
Consulta la Documentación API de sanitize
para más información.
4.2 sanitize_css
Sanitiza un bloque de código CSS, especialmente cuando encuentra un atributo de estilo en contenido HTML. sanitize_css
es particularmente útil cuando se trata de contenido generado por el usuario o contenido dinámico que incluye atributos de estilo.
El método sanitize_css
a continuación eliminará los estilos que no están permitidos.
sanitize_css("background-color: red; color: white; font-size: 16px;")
Consulta la Documentación API de sanitize_css
para más información.
4.3 strip_links
Elimina todas las etiquetas de enlace del texto dejando solo el texto del enlace.
strip_links("<a href='https://rubyonrails.org'>Ruby on Rails</a>")
# => Ruby on Rails
strip_links("correos a <a href='mailto:me@email.com'>me@email.com</a>.")
# => correos a me@email.com.
strip_links("Blog: <a href='http://myblog.com/'>Visitar</a>.")
# => Blog: Visitar.
Consulta la Documentación API de strip_links
para más información.
4.4 strip_tags
Elimina todas las etiquetas HTML del HTML, incluyendo comentarios y caracteres especiales.
strip_tags("Elimina <i>estas</i> etiquetas!")
# => Elimina estas etiquetas!
strip_tags("<b>Negrita</b> ya no más! <a href='more.html'>Ver más</a>")
# => Negrita ya no más! Ver más
strip_links('<<a href="https://example.org">link malformado & link</a>')
# => <link malformado & link
Consulta la Documentación API de strip_tags
para más información.
5 Activos
Un conjunto de métodos para generar HTML que enlaza vistas a activos como imágenes, archivos JavaScript, hojas de estilo y feeds.
Por defecto, Rails enlaza a estos activos en el host actual en la carpeta pública, pero puedes dirigir a Rails a enlazar a 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, digamos que tu host de activos es assets.example.com
:
config.asset_host = "assets.example.com"
entonces la URL correspondiente para un image_tag
sería:
image_tag("rails.png")
# => <img src="//assets.example.com/images/rails.png" />
5.1 audio_tag
Genera una etiqueta de audio HTML con fuente(s), ya sea como una sola etiqueta para una fuente de cadena o etiquetas de fuente anidadas dentro de un array para múltiples fuentes. Las fuentes
pueden ser rutas completas, archivos en tu directorio de audios públicos, o adjuntos de Active Storage.
audio_tag("sound")
# => <audio src="/audios/sound"></audio>
audio_tag("sound.wav", "sound.mid")
# => <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio>
audio_tag("sound", controls: true)
# => <audio controls="controls" src="/audios/sound"></audio>
Internamente, audio_tag
usa audio_path
de los AssetUrlHelpers para construir la ruta del audio.
Consulta la Documentación API de audio_tag
para más información.
5.2 auto_discovery_link_tag
Devuelve una etiqueta de enlace que los navegadores y lectores de feeds pueden usar para auto-detectar 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" />
Consulta la Documentación API de auto_discovery_link_tag
para más información.
5.3 favicon_link_tag
Devuelve una etiqueta de enlace para un favicon gestionado por el pipeline de activos. La fuente
puede ser una ruta completa o un archivo que exista en tu directorio de activos.
favicon_link_tag
# => <link href="/assets/favicon.ico" rel="icon" type="image/x-icon" />
Consulta la Documentación API de favicon_link_tag
para más información.
5.4 image_tag
Devuelve una etiqueta de imagen HTML para la fuente. La fuente
puede ser una ruta completa o un archivo que exista en tu directorio app/assets/images
.
image_tag("icon.png")
# => <img src="/assets/icon.png" />
image_tag("icon.png", size: "16x10", alt: "Editar Artículo")
# => <img src="/assets/icon.png" width="16" height="10" alt="Editar Artículo" />
Internamente, image_tag
usa image_path
de los AssetUrlHelpers para construir la ruta de la imagen.
Consulta la Documentación API de image_tag
para más información.
5.5 javascript_include_tag
Devuelve una etiqueta de script HTML para cada una de las fuentes proporcionadas. Puedes pasar el nombre del archivo (la extensión .js
es opcional) de archivos JavaScript que existen en tu directorio app/assets/javascripts
para su inclusión en la página actual, o puedes pasar la ruta completa relativa a tu raíz de documentos.
javascript_include_tag("common")
# => <script src="/assets/common.js"></script>
javascript_include_tag("common", async: true)
# => <script src="/assets/common.js" async="async"></script>
Algunos de los atributos más comunes son async
y defer
, donde async
permitirá que el script se cargue en paralelo para ser analizado y evaluado tan pronto como sea posible, y defer
indicará que el script está destinado a ejecutarse después de que el documento haya sido analizado.
Internamente, javascript_include_tag
usa javascript_path
de los AssetUrlHelpers para construir la ruta del script.
Consulta la Documentación API de javascript_include_tag
para más información.
5.6 picture_tag
Devuelve una etiqueta de imagen HTML para la fuente. Admite pasar una Cadena, un Array, o un Bloque.
picture_tag("icon.webp", "icon.png")
Esto genera el siguiente HTML:
<picture>
<source srcset="/assets/icon.webp" type="image/webp" />
<source srcset="/assets/icon.png" type="image/png" />
<img src="/assets/icon.png" />
</picture>
Consulta la Documentación API de picture_tag
para más información.
5.7 preload_link_tag
Devuelve una etiqueta de enlace que los navegadores pueden usar para precargar la fuente. La fuente puede ser la ruta de un recurso gestionado por el pipeline de activos, una ruta completa, o un URI.
preload_link_tag("application.css")
# => <link rel="preload" href="/assets/application.css" as="style" type="text/css" />
Consulta la Documentación API de preload_link_tag
para más información.
5.8 stylesheet_link_tag
Devuelve una etiqueta de enlace de hoja de estilo para las fuentes especificadas como argumentos. Si no especificas una extensión, .css
se añadirá automáticamente.
stylesheet_link_tag("application")
# => <link href="/assets/application.css" rel="stylesheet" />
stylesheet_link_tag("application", media: "all")
# => <link href="/assets/application.css" media="all" rel="stylesheet" />
media
se usa para especificar el tipo de medio para el enlace. Los tipos de medios más comunes son all
, screen
, print
, y speech
.
Internamente, stylesheet_link_tag
usa stylesheet_path
de los AssetUrlHelpers para construir la ruta de la hoja de estilo.
Consulta la Documentación API de stylesheet_link_tag
para más información.
5.9 video_tag
Genera una etiqueta de video HTML con fuente(s), ya sea como una sola etiqueta para una fuente de cadena o etiquetas de fuente anidadas dentro de un array para múltiples fuentes. Las fuentes
pueden ser rutas completas, archivos en tu directorio de videos públicos, o adjuntos de Active Storage.
video_tag("trailer")
# => <video src="/videos/trailer"></video>
video_tag(["trailer.ogg", "trailer.flv"])
# => <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
video_tag("trailer", controls: true)
# => <video controls="controls" src="/videos/trailer"></video>
Internamente, video_tag
usa video_path
de los AssetUrlHelpers para construir la ruta del video.
Consulta la Documentación API de video_tag
para más información.
6 JavaScript
Un conjunto de métodos para trabajar con JavaScript en tus vistas.
6.1 escape_javascript
Escapa retornos de carro y comillas simples y dobles para segmentos de JavaScript. Utilizarías este método para tomar una cadena de texto y asegurarte de que no contenga caracteres inválidos cuando el navegador intente analizarla.
Por ejemplo, si tienes un parcial con un saludo que contiene comillas dobles, puedes escapar el saludo para usarlo en un alerta de JavaScript.
<%# app/views/users/greeting.html.rb %>
Mi nombre es <%= current_user.name %>, y estoy aquí para decir "¡Bienvenido a nuestro sitio web!"
<script>
var greeting = "<%= escape_javascript render('users/greeting') %>";
alert(`Hola, ${greeting}`);
</script>
Esto escapará las comillas correctamente y mostrará el saludo en un cuadro de alerta.
Consulta la Documentación API de escape_javascript
para más información.
6.2 javascript_tag
Devuelve una etiqueta de JavaScript envolviendo el código proporcionado. Puedes pasar un hash de opciones para controlar el comportamiento de la etiqueta <script>
.
javascript_tag("alert('Todo está bien')", type: "application/javascript")
<script type="application/javascript">
//<![CDATA[
alert('Todo está bien')
//]]>
</script>
En lugar de pasar el contenido como un argumento, también puedes usar un bloque.
<%= javascript_tag type: "application/javascript" do %>
alert("¡Bienvenido a mi aplicación!")
<% end %>
Consulta la Documentación API de javascript_tag
para más información.
7 Etiquetas Alternativas
Un conjunto de métodos para generar etiquetas HTML programáticamente.
7.1 tag
Genera una etiqueta HTML independiente con el nombre
y opciones
dados.
Cada etiqueta se puede construir con:
tag.some_tag_name(optional content, options)
donde el nombre de la etiqueta puede ser, por ejemplo, br
, div
, section
, article
, o cualquier etiqueta realmente.
Por ejemplo, aquí hay algunos usos comunes:
tag.h1 "Todos los títulos se ajustan para imprimir"
# => <h1>Todos los títulos se ajustan para imprimir</h1>
tag.div "¡Hola, mundo!"
# => <div>¡Hola, mundo!</div>
Además, puedes pasar opciones para agregar atributos a la etiqueta generada.
tag.section class: %w( gatitos cachorros )
# => <section class="gatitos cachorros"></section>
Además, los atributos HTML data-*
se pueden pasar al helper tag
usando la opción data
, con un hash que contiene pares clave-valor de subatributos. Los subatributos se convierten en atributos data-*
que se convierten a guiones para funcionar bien con JavaScript.
tag.div data: { user_id: 123 }
# => <div data-user-id="123"></div>
Consulta la Documentación API de tag
para más información.
7.2 token_list
Devuelve una cadena de tokens construida a partir de los argumentos proporcionados. Este método también se alias como class_names
.
token_list("gatos", "perros")
# => "gatos perros"
token_list(nil, false, 123, "", "foo", { bar: true })
# => "123 foo bar"
móvil, alineación = true, "centro"
token_list("flex items-#{alineación}", "flex-col": móvil)
# => "flex items-centro flex-col"
class_names("flex items-#{alineación}", "flex-col": móvil) # usando el alias
# => "flex items-centro flex-col"
8 Captura de Bloques
Un conjunto de métodos para permitirte extraer el marcado generado que se puede usar en otras partes de un archivo de plantilla o diseño.
Proporciona un método para capturar bloques en variables a través de capture
, y una forma de capturar un bloque de marcado para usar en un diseño a través de content_for
.
8.1 capture
El método capture
te permite extraer parte de una plantilla en una variable.
<% @greeting = capture do %>
<p>¡Bienvenido! La fecha y hora es <%= Time.current %></p>
<% end %>
Luego puedes usar esta variable en cualquier parte de tus plantillas, diseños o helpers.
<html>
<head>
<title>¡Bienvenido!</title>
</head>
<body>
<%= @greeting %>
</body>
</html>
El retorno de capture es la cadena generada por el bloque.
@greeting
# => "¡Bienvenido a mi nueva página web brillante! La fecha y hora es 2018-09-06 11:09:16 -0500"
Consulta la Documentación API de capture
para más información.
8.2 content_for
Llamar a content_for
almacena un bloque de marcado en un identificador para su uso posterior. Puedes hacer llamadas subsiguientes al contenido almacenado en otras plantillas, módulos de helpers o el diseño pasando el identificador como un argumento a yield
.
Un caso de uso común es establecer el título de una página en un bloque content_for
.
Defines un bloque content_for
en la vista de la página especial, y luego lo yield
dentro del diseño. Para otras páginas, donde no se utiliza el bloque content_for
, permanece vacío, lo que resulta en que no se rinda nada.
<%# app/views/users/special_page.html.erb %>
<% content_for(:html_title) { "Título de Página Especial" } %>
<%# app/views/layouts/application.html.erb %>
<html>
<head>
<title><%= content_for?(:html_title) ? yield(:html_title) : "Título Predeterminado" %></title>
</head>
</html>
Notarás que en el ejemplo anterior, usamos el método predicado content_for?
para renderizar condicionalmente un título. Este método verifica si se ha capturado algún contenido usando content_for
, lo que te permite ajustar partes de tu diseño basado en el contenido dentro de tus vistas.
Además, puedes emplear content_for
dentro de un módulo de helper.
# app/helpers/title_helper.rb
module TitleHelper
def html_title
content_for(:html_title) || "Título Predeterminado"
end
end
Ahora, puedes llamar a html_title
en tu diseño para recuperar el contenido almacenado en el bloque content_for
. Si se establece un bloque content_for
en la página que se está renderizando, como en el caso de la special_page
, mostrará el título. De lo contrario, mostrará el texto predeterminado "Título Predeterminado".
ADVERTENCIA: content_for
se ignora en cachés. Así que no deberías usarlo para elementos que serán almacenados en caché de fragmentos.
NOTA: Puedes estar pensando cuál es la diferencia entre capture
y content_for
?
capture
se usa para capturar un bloque de marcado en una variable, mientras que content_for
se usa para almacenar un bloque de marcado en un identificador para su uso posterior. Internamente, content_for
realmente llama a capture
. Sin embargo, la diferencia clave radica en su comportamiento cuando se invocan múltiples veces.
content_for
se puede llamar repetidamente, concatenando los bloques que recibe para un identificador específico en el orden en que se proporcionan. Cada llamada subsiguiente simplemente se suma a lo que ya está almacenado. En contraste, capture
solo devuelve el contenido del bloque, sin llevar un registro de ninguna invocación anterior.
Consulta la Documentación API de content_for
para más información.
9 Rendimiento
9.1 benchmark
Envuelve un bloque benchmark
alrededor de operaciones costosas o posibles cuellos de botella para obtener una lectura de tiempo para la operación.
<% benchmark "Procesar archivos de datos" do %>
<%= expensive_files_operation %>
<% end %>
Esto añadiría algo como Procesar archivos de datos (0.34523)
al registro, que luego puedes usar para comparar tiempos al optimizar tu código.
NOTA: Este helper es parte de Active Support, y también está disponible en controladores, helpers, modelos, etc.
Consulta la Documentación API de benchmark
para más información.
9.2 cache
Puedes 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 HTML estáticos, y así sucesivamente. Permite que un fragmento de lógica de vista se envuelva en un bloque de caché y se sirva desde la tienda de caché cuando llegue la próxima solicitud.
El método cache
toma un bloque que contiene el contenido que deseas almacenar en caché.
Por ejemplo, podrías almacenar en caché el pie de página de tu diseño de aplicación envolviéndolo en un bloque cache
.
<% cache do %>
<%= render "application/footer" %>
<% end %>
También podrías almacenar en caché basado en instancias de modelo, por ejemplo, puedes almacenar en caché cada artículo en una página pasando el objeto article
al método cache
. Esto almacenaría en caché cada artículo por separado.
<% @articles.each do |article| %>
<% cache article do %>
<%= render article %>
<% end %>
<% end %>
Cuando tu aplicación recibe su primera solicitud a esta página, Rails escribirá una nueva entrada de caché con una clave única. Una clave se ve algo así:
views/articles/index:bea67108094918eeba32cd4a6f786301/articles/1
Consulta Fragment Caching
y la Documentación API de cache
para más información.
10 Misceláneo
10.1 atom_feed
Los Feeds Atom son formatos de archivo basados en XML utilizados para sindicar contenido y pueden ser utilizados por usuarios en lectores de feeds para navegar contenido o por motores de búsqueda para ayudar a descubrir información adicional sobre tu sitio.
Este helper facilita la construcción de un feed Atom, y se utiliza principalmente en plantillas Builder para crear XML. Aquí hay un ejemplo completo de uso:
# 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("Índice de Artículos")
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
Consulta la Documentación API de atom_feed
para más información.
10.2 debug
Devuelve una representación YAML de un objeto envuelto con una etiqueta pre
. 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>
Consulta la Documentación API de debug
para más información.
Comentarios
Se te anima a ayudar a mejorar la calidad de esta guía.
Por favor contribuye si ves algún error tipográfico o errores fácticos. Para comenzar, puedes leer nuestra sección de contribuciones a la documentación.
También puedes encontrar contenido incompleto o cosas que no están actualizadas. Por favor agrega cualquier documentación faltante para main. Asegúrate de revisar Guías Edge primero para verificar si los problemas ya están resueltos o no en la rama principal. Revisa las Guías de Ruby on Rails para estilo y convenciones.
Si por alguna razón detectas algo que corregir pero no puedes hacerlo tú mismo, por favor abre un issue.
Y por último, pero no menos importante, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.