[RUBY] [Rails / simple_format] Méthode d'assistance qui reflète les sauts de ligne saisis dans le formulaire

Statut

demo


environnement


Code appris

【référence】


Ce code

app/controllers/tasks_controller.rb


def show
  @task = Task.find(params[:id])
  @commits = @task.commits
end

erb:app/views/tasks/show.html.erb


<% @commits.each do |commit| %>
  <%= commit.content %>
<% end %>

Avec cette méthode d'affichage, les sauts de ligne dans commit.content ne sont pas reflétés.

<Comme ça> demo

Cela peut être résolu en utilisant simple_format. Faisons-le réellement.


Utilisez simple_format

erb:app/views/tasks/show.html.erb


<!-- simple_utiliser le format-->
<% @commits.each do |commit| %>
  <%= simple_format(commit.content) %>
<% end %>

** simple_format est une méthode d'assistance ** qui exprime les sauts de ligne avec des balises p et des balises br. Mettez simplement le texte que vous souhaitez afficher dans simple_format et vous avez terminé.

<Le résultat ressemble à ceci> demo

Eh bien, pour le moment, l'objectif est atteint. Cependant, il y a un problème avec cette implémentation. Il n'est pas "échappé" </ b>.

Regardons de plus près.


Laisser s'échapper

L'évasion est une technique utilisée dans les mesures de sécurité. En termes simples, il a pour rôle " d'éliminer la signification des caractères significatifs </ b>".

Regardons cela concrètement. Par exemple, supposons que vous saisissiez ce qui suit.

demo

Si vous affichez cette valeur sans l'échapper, elle sera reconnue comme une "balise HTML" comme celle-ci.

demo

En HTML, "<" est reconnu comme signifiant "balise commence!". Par conséquent, s'il n'est pas échappé, il sera affiché comme un élément h1.

Cette fonction d'échappement est accordée en utilisant le <% =%> utilisé dans les vues Rails. Cependant, si vous utilisez simple_format, vous perdez cette fonctionnalité.

Par conséquent, lorsque vous utilisez simple_format, utilisez l'option h. C'est un excellent moyen d'ajouter une fonction d'échappement à simple_format.

erb:app/views/tasks/show.html.erb



<%#utiliser l'option h%>
<% @commits.each do |commit| %>
  <%= simple_format(h(commit.content)) %>
<% end %>

Cela changera l'affichage comme indiqué ci-dessous.

demo

La signification est privée de "<" etc., et elle est affichée comme un simple symbole ou caractère. Parallèlement à cela, les lettres sont devenues plus petites! (Inclus dans la balise p)


Sommaire

  • Je veux refléter le saut de ligne du formulaire

  • Possible avec simple_format!

  • Mieux vaut utiliser h pour les mesures de sécurité


Il semble que simple_format soit souvent utilisé, mais c'est aussi une méthode d'aide effrayante si les mesures de sécurité sont négligées. Lorsque vous l'utilisez, gardez-le à l'esprit.

référence

Recommended Posts