edge
Plus sur rubyonrails.org: Plus de Ruby on Rails

Aide aux vues d'action

Après avoir lu ce guide, vous saurez :

1 Aperçu des aides fournies par Action View

WIP: Toutes les aides ne sont pas répertoriées ici. Pour une liste complète, consultez la documentation de l'API.

Ce qui suit est seulement un bref aperçu des aides disponibles dans Action View. Il est recommandé de consulter la documentation de l'API, qui couvre toutes les aides en détail, mais cela devrait servir de bon point de départ.

1.1 AssetTagHelper

Ce module fournit des méthodes pour générer du HTML qui lie les vues aux ressources telles que les images, les fichiers JavaScript, les feuilles de style et les flux.

Par défaut, Rails lie ces ressources à l'hôte actuel dans le dossier public, mais vous pouvez indiquer à Rails de lier les ressources à partir d'un serveur de ressources dédié en définissant config.asset_host dans la configuration de l'application, généralement dans config/environments/production.rb. Par exemple, supposons que votre hôte de ressources soit assets.example.com :

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

Renvoie une balise de lien que les navigateurs et les lecteurs de flux peuvent utiliser pour détecter automatiquement un flux RSS, Atom ou 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

Calcule le chemin d'une ressource image dans le répertoire app/assets/images. Les chemins complets à partir de la racine du document seront transmis. Utilisé en interne par image_tag pour construire le chemin de l'image.

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

L'empreinte digitale sera ajoutée au nom de fichier si config.assets.digest est défini sur true.

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

1.1.3 image_url

Calcule l'URL d'une ressource image dans le répertoire app/assets/images. Cela appellera image_path en interne et fusionnera avec votre hôte actuel ou votre hôte de ressources.

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

1.1.4 image_tag

Renvoie une balise d'image HTML pour la source. La source peut être un chemin complet ou un fichier qui existe dans votre répertoire app/assets/images.

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

1.1.5 javascript_include_tag

Renvoie une balise de script HTML pour chacune des sources fournies. Vous pouvez passer le nom de fichier (l'extension .js est facultative) des fichiers JavaScript qui existent dans votre répertoire app/assets/javascripts pour les inclure dans la page actuelle, ou vous pouvez passer le chemin complet par rapport à la racine de votre document.

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

1.1.6 javascript_path

Calcule le chemin d'une ressource JavaScript dans le répertoire app/assets/javascripts. Si le nom de fichier source n'a pas d'extension, .js sera ajouté. Les chemins complets à partir de la racine du document seront transmis. Utilisé en interne par javascript_include_tag pour construire le chemin du script.

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

1.1.7 javascript_url

Calcule l'URL d'une ressource JavaScript dans le répertoire app/assets/javascripts. Cela appellera javascript_path en interne et fusionnera avec votre hôte actuel ou votre hôte de ressources.

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

Renvoie une balise de lien de feuille de style pour les sources spécifiées en arguments. Si vous ne spécifiez pas d'extension, .css sera ajouté automatiquement.

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

1.1.9 stylesheet_path

Calcule le chemin d'une ressource de feuille de style dans le répertoire app/assets/stylesheets. Si le nom de fichier source n'a pas d'extension, .css sera ajouté. Les chemins complets à partir de la racine du document seront transmis. Utilisé en interne par stylesheet_link_tag pour construire le chemin de la feuille de style.

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

1.1.10 stylesheet_url

Calcule l'URL d'une ressource de feuille de style dans le répertoire app/assets/stylesheets. Cela appellera stylesheet_path en interne et fusionnera avec votre hôte actuel ou votre hôte de ressources.

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

1.2 AtomFeedHelper

1.2.1 atom_feed

Cet assistant facilite la création d'un flux Atom. Voici un exemple d'utilisation complet :

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

Vous permet de mesurer le temps d'exécution d'un bloc dans un modèle et enregistre le résultat dans le journal. Entourez ce bloc autour des opérations coûteuses ou des éventuels goulots d'étranglement pour obtenir une mesure de temps pour l'opération. html+erb <% benchmark "Traitement des fichiers de données" do %> <%= expensive_files_operation %> <% end %>

Cela ajouterait quelque chose comme "Traitement des fichiers de données (0.34523)" dans le journal, que vous pouvez ensuite utiliser pour comparer les durées lors de l'optimisation de votre code.

1.4 CacheHelper

1.4.1 cache

Une méthode pour mettre en cache des fragments d'une vue plutôt qu'une action ou une page entière. Cette technique est utile pour mettre en cache des éléments tels que des menus, des listes de sujets d'actualité, des fragments HTML statiques, etc. Cette méthode prend un bloc qui contient le contenu que vous souhaitez mettre en cache. Voir AbstractController::Caching::Fragments pour plus d'informations.

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

1.5 CaptureHelper

1.5.1 capture

La méthode capture vous permet d'extraire une partie d'un modèle dans une variable. Vous pouvez ensuite utiliser cette variable n'importe où dans vos modèles ou votre mise en page.

<% @greeting = capture do %>
  <p>Bienvenue ! La date et l'heure sont <%= Time.now %></p>
<% end %>

La variable capturée peut ensuite être utilisée n'importe où ailleurs.

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

1.5.2 content_for

L'appel à content_for stocke un bloc de balisage dans un identifiant pour une utilisation ultérieure. Vous pouvez faire des appels ultérieurs au contenu stocké dans d'autres modèles ou la mise en page en passant l'identifiant en argument à yield.

Par exemple, supposons que nous avons une mise en page d'application standard, mais aussi une page spéciale qui nécessite un certain JavaScript que le reste du site n'a pas besoin. Nous pouvons utiliser content_for pour inclure ce JavaScript sur notre page spéciale sans alourdir le reste du site.

app/views/layouts/application.html.erb

<html>
  <head>
    <title>Bienvenue !</title>
    <%= yield :special_script %>
  </head>
  <body>
    <p>Bienvenue ! La date et l'heure sont <%= Time.now %></p>
  </body>
</html>

app/views/articles/special.html.erb

<p>Ceci est une page spéciale.</p>

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

1.6 DateHelper

1.6.1 distance_of_time_in_words

Rapporte la distance approximative dans le temps entre deux objets Time ou Date ou des entiers en secondes. Définissez include_seconds sur true si vous souhaitez des approximations plus détaillées.

distance_of_time_in_words(Time.now, Time.now + 15.seconds)
# => moins d'une minute
distance_of_time_in_words(Time.now, Time.now + 15.seconds, include_seconds: true)
# => moins de 20 secondes

1.6.2 time_ago_in_words

Comme distance_of_time_in_words, mais où to_time est fixé à Time.now.

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

1.7 DebugHelper

Renvoie une balise pre contenant l'objet déversé par YAML. Cela crée une manière très lisible d'inspecter un objet.

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

Les helpers de formulaire sont conçus pour faciliter le travail avec les modèles par rapport à l'utilisation d'éléments HTML standard en fournissant un ensemble de méthodes pour créer des formulaires basés sur vos modèles. Cet helper génère le HTML pour les formulaires, en fournissant une méthode pour chaque type de saisie (par exemple, texte, mot de passe, sélection, etc.). Lorsque le formulaire est soumis (c'est-à-dire lorsque l'utilisateur appuie sur le bouton de soumission ou que form.submit est appelé via JavaScript), les saisies du formulaire seront regroupées dans l'objet params et renvoyées au contrôleur.

Vous pouvez en savoir plus sur les helpers de formulaire dans le Guide des helpers de formulaire Action View.

1.9 JavaScriptHelper

Fournit des fonctionnalités pour travailler avec JavaScript dans vos vues.

1.9.1 escape_javascript

Échappe les retours chariot et les guillemets simples et doubles pour les segments JavaScript.

1.9.2 javascript_tag

Renvoie une balise JavaScript enveloppant le code fourni.

javascript_tag "alert('Tout va bien')"
<script>
//<![CDATA[
alert('Tout va bien')
//]]>
</script>

1.10 NumberHelper

Fournit des méthodes pour convertir des nombres en chaînes formatées. Des méthodes sont fournies pour les numéros de téléphone, les devises, les pourcentages, la précision, la notation positionnelle et la taille des fichiers.

1.10.1 number_to_currency

Formate un nombre en une chaîne de devise (par exemple, $13.65).

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

1.10.2 number_to_human

Affiche joliment (formate et approxime) un nombre pour qu'il soit plus lisible par les utilisateurs ; utile pour les nombres qui peuvent devenir très grands.

number_to_human(1234)    # => 1,23 millier
number_to_human(1234567) # => 1,23 million

1.10.3 number_to_human_size

Formate les octets en une représentation plus compréhensible ; utile pour indiquer la taille des fichiers aux utilisateurs.

number_to_human_size(1234)    # => 1,21 Ko
number_to_human_size(1234567) # => 1,18 Mo

1.10.4 number_to_percentage

Formate un nombre en une chaîne de pourcentage. ruby number_to_percentage(100, precision: 0) # => 100%

1.10.5 number_to_phone

Formate un nombre en un numéro de téléphone (par défaut, aux États-Unis).

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

1.10.6 number_with_delimiter

Formate un nombre avec des milliers groupés en utilisant un délimiteur.

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

1.10.7 number_with_precision

Formate un nombre avec le niveau de precision spécifié, qui est par défaut de 3.

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

1.11 SanitizeHelper

Le module SanitizeHelper fournit un ensemble de méthodes pour nettoyer le texte des éléments HTML indésirables.

1.11.1 sanitize

Cette méthode sanitize va encoder en HTML toutes les balises et supprimer tous les attributs qui ne sont pas spécifiquement autorisés.

sanitize @article.body

Si les options :attributes ou :tags sont passées, seuls les attributs et balises mentionnés sont autorisés et rien d'autre.

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

Pour modifier les valeurs par défaut pour plusieurs utilisations, par exemple en ajoutant des balises de tableau par défaut :

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

1.11.2 sanitize_css(style)

Nettoie un bloc de code CSS.

Supprime toutes les balises de lien du texte en ne laissant que le texte du lien.

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)

Supprime toutes les balises HTML du html, y compris les commentaires. Cette fonctionnalité est alimentée par le gem 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 sortie peut encore contenir des caractères non échappés '<', '>', '&' et perturber les navigateurs.

1.12 UrlHelper

Fournit des méthodes pour créer des liens et obtenir des URL qui dépendent du sous-système de routage.

1.12.1 url_for

Retourne l'URL pour l'ensemble des options fournies.

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

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

Crée un lien vers une URL dérivée de url_for en interne. Principalement utilisé pour créer des liens de ressources RESTful, qui pour cet exemple, se résume à passer des modèles à link_to.

Exemples

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

Vous pouvez également utiliser un bloc si votre cible de lien ne peut pas être incluse dans le paramètre du nom. Exemple en ERB :

<%= link_to @profile do %>
  <strong><%= @profile.name %></strong> -- <span>Check it out!</span>
<% end %>

produirait :

<a href="/profiles/1">
  <strong>David</strong> -- <span>Check it out!</span>
</a>

Voir la documentation de l'API pour plus d'informations

1.12.3 button_to

Génère un formulaire qui soumet vers l'URL passée. Le formulaire a un bouton de soumission avec la valeur du name.

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

produirait approximativement quelque chose comme :

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

Voir la documentation de l'API pour plus d'informations

1.13 CsrfHelper

Renvoie les balises meta "csrf-param" et "csrf-token" avec le nom du paramètre et du jeton de protection contre les attaques de falsification de requête intersite.

<%= csrf_meta_tags %>

REMARQUE : Les formulaires classiques génèrent des champs masqués, ils n'utilisent donc pas ces balises. Plus de détails peuvent être trouvés dans le Guide de sécurité de Rails.

Retour d'information

Vous êtes encouragé à contribuer à l'amélioration de la qualité de ce guide.

Veuillez contribuer si vous trouvez des fautes de frappe ou des erreurs factuelles. Pour commencer, vous pouvez lire notre contribution à la documentation section.

Vous pouvez également trouver du contenu incomplet ou des informations qui ne sont pas à jour. Veuillez ajouter toute documentation manquante pour la version principale. Assurez-vous de vérifier Edge Guides d'abord pour vérifier si les problèmes ont déjà été résolus ou non sur la branche principale. Consultez les Directives des guides Ruby on Rails pour le style et les conventions.

Si pour une raison quelconque vous repérez quelque chose à corriger mais ne pouvez pas le faire vous-même, veuillez ouvrir un problème.

Et enfin, toute discussion concernant la documentation de Ruby on Rails est la bienvenue sur le Forum officiel de Ruby on Rails.