Il s'agit d'une solution de contournement lorsque vous souhaitez basculer le contenu du menu d'en-tête pour chaque page. (Par exemple, je souhaite afficher les menus de A, B et C sur l'écran d'accueil, et le menu de D sur le nouvel écran de publication, etc.)
MacOS 10.15.7 ruby 2.6.5 Ruby on Rails 6.0.0
En tant que flux, (1) Créez un modèle partiel en divisant l'en-tête en un «en-tête d'écran d'accueil» et un «nouvel en-tête d'écran de publication». (2) branchez conditionnellement en fonction du chemin de la demande et changez le contenu de l'affichage. Ce sera.
Cette fois, nous modifierons le contenu du menu affiché dans l'en-tête lors de la connexion.
erb:_root_header.html.erb
<div class="headerMenus">
<div class="headerMenus__left">
<%= link_to image_tag("myTown4.jpg ", class: "headerLogo"), "/" %>
<% if user_signed_in? %>
<div class="loginedMenus">
<a href="#0", class="loginMenu">Top</a>
<a href="#1", class="loginMenu">Category</a>
<a href="#2", class="loginMenu">Prefecture</a>
<a href="#3", class="loginMenu">New Posts</a>
</div>
<% else %>
<div class="beforeLoginMenus">
<%= link_to "Connexion invité", users_guest_sign_in_path, method: :post, class: 'beforeLoginMenu' %>
<%= link_to "S'identifier", new_user_session_path, class: 'beforeLoginMenu' %>
<%= link_to "s'inscrire", new_user_registration_path, class: 'beforeLoginMenu' %>
</div>
<% end %>
</div>
//Partiellement omis//
</div>
Et créez. D'ailleurs, lorsque vous vous connectez, vous verrez quatre menus: "Top, Category, Prefecture, New Posts".
erb:_header.html.erb
<div class="headerMenus">
<div class="headerMenus__left">
<%= link_to image_tag("myTown4.jpg ", class: "headerLogo"), "/" %>
<% if user_signed_in? %>
<div class="loginedMenus">
<%= link_to "Top Page", root_path, class:"loginMenu" %>
</div>
<% else %>
<div class="beforeLoginMenus">
<%= link_to "Connexion invité", users_guest_sign_in_path, method: :post, class: 'beforeLoginMenu' %>
<%= link_to "S'identifier", new_user_session_path, class: 'beforeLoginMenu' %>
<%= link_to "s'inscrire", new_user_registration_path, class: 'beforeLoginMenu' %>
</div>
<% end %>
</div>
//Partiellement omis//
</div>
Lorsque vous vous connectez, vous verrez un menu appelé "Top Page".
Dans application.html.erb dans les vues / mises en page, décrivez le branchement conditionnel en fonction du chemin de la requête (chemin vers l'écran d'accueil ou chemin des autres écrans).
erb:application.html.erb
//Partiellement omis//
<body>
<header class="header">
<%#Modifier l'affichage de l'en-tête sur la première page et les autres pages%>
<% if request.path == '/' %>
<%= render partial: "layouts/root_header" %>
<% else %>
<%= render partial: "layouts/header" %>
<% end %>
</header>
//Partiellement omis//
</body>
Il y a une description <% if request.path == '/'%>
, ce qui signifie "lorsque le chemin de la demande est '/' (racine)". Dans ce cas, le chemin racine est défini sur l'écran d'accueil.
Si la condition est vraie (le chemin racine)
<%= render partial: "layouts/root_header" %>
Appelez _root_header.html.erb avec.
Si faux (autre que le chemin racine)
<%= render partial: "layouts/header" %>
Appelez header.html.erb avec.
c'est tout.
Je me demande s'il existe une autre meilleure façon. Si quelqu'un a un meilleur moyen, j'apprécierais que vous me le disiez. Merci!