Dans Rails, la ** disposition commune ** est essentiellement appliquée à ʻapplication.html.erb, et la ** partie variable ** est gérée dans la balise
body par ʻaction.html.erb
.
Ici, yield
est utilisé pour diviser et gérer. Voyons un exemple! !!
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
</html>
Il faut noter le «rendement». Le fichier fractionné est stocké ici. Voici comment utiliser le rendement. Maintenant, réfléchissons-y en insérant content_for
d'ici! Cette fois, considérons un programme qui change le titre.
content_for
est utilisé lors de l'affichage de la ** mise en page individuelle à la mise en page commune. ** Prenons un exemple.
application.html.erb
<title><%= yield :title %></title>
En faisant cela, vous pouvez modifier la partie titre de manière variable. Il est souvent utilisé lorsque la mise en page change plusieurs fois dans une seule application.
app/views/hello/index.html.erb
<% content_for :title do %>
hello#titre de l'index
<% end %>
<h1>hello#index</h1>
<p>Find me in app/views/hello/index.html.erb</p>
Remarquez ici de content_for: title do
à ʻend. Cette partie réagira avec
yield: title` et entrera. En fait, l'image est la suivante.
<title>hello#titre de l'index</title>
En passant, vous pouvez également définir la valeur par défaut comme suit.
<title><%= content_for?(:title) ? yield(:title) : "Sample"%></title>
Si content_for?
A content_for
,` yield (: title) ʻest chargé, sinon le titre sera "Sample". (C'est un opérateur ternaire.)
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<header>Conception d'en-tête</header>
<div class="notice">
<%= content_for?(:notice) ? yield(:notice) %>
</div>
<%= yield %>
</body>
</html>
Faites attention au bas de l'en-tête. notice
(Imaginez une notification ici.) J'écris un programme qui affiche yield (: notice)
quand il y a une notification.
Si vous souhaitez afficher "Avis" dans toutes les mises en page, mais que vous souhaitez modifier le contenu, vous pouvez le faire comme suit.
<%= yield(:notice) %>
Avec un fichier fractionné (variable)
<%= content_for :notice do%>
<p>Mise en garde!</p>
<% end %>
<%= content_for :notice do%>
<p>Bonne nouvelle!</p>
<% end %>
Vous pouvez également modifier la partie de mise en page commune pour chaque page.
Recommended Posts