TGViewer
Codica - корисне про IT Codica - корисне про IT @codica · 2.07K subscribers
Post #4679 251
📌 How should you use content_for and yield?
📍 Очікувана відповідь:


У Ruby on Rails yield і content_for використовуються для передачі та динамічної підстановки контенту з view-шаблонів у layout.

1️⃣ yield

Це маркер-placeholder у layout, куди Rails вставляє скомпільований HTML-код конкретного view.


<!-- app/views/layouts/application.html.erb -->
<body>
<%= yield %> <!-- Сюди вставиться контент, наприклад, з posts/index.html.erb -->
</body>


2️⃣ content_for

Дозволяє передати іменований блок контенту (named block) з view у певне місце в layout.


<!-- app/views/posts/show.html.erb -->
<% content_for :title do %>
Posts Page
<% end %>


У layout ми викликаємо цей блок за іменем:


<title><%= yield(:title) %></title>


Типові кейси використання:
🔹 Динамічні мета-теги та заголовки:


<% content_for :title, "Dashboard" %>


🔹 Підключення специфічних для сторінки скриптів чи стилів (хоча в епоху Webpacker/Propshaft це робиться рідше).
🔹 Кастомні зони: сайдбари, хлібні крихти (breadcrumbs).

⚠️ Важливі технічні pitfalls:

• Накопичення контенту: content_for за замовчуванням конкатенує (додає) блоки, якщо викликати його кілька разів з однаковим ключем. Якщо вам потрібно суворо перезаписати значення (наприклад, перевизначити title в partial), використовуйте метод provide замість content_for.

• Продуктивність: Не зловживайте content_for всередині циклів чи великої кількості partials — це створює зайве навантаження на рендеринг у пам‘яті.

👉 yield = місце вставки
👉 content_for = спосіб передати контент у це місце (з можливістю append)

📌 How should you use nested layouts?
📍 Очікувана відповідь:


Nested layouts у Rails використовуються для створення ієрархії шаблонів (шаблони в шаблонах). Вони потрібні, коли група сторінок має унікальну структуру (наприклад, адмінка), але повинна залишатися всередині глобального базового шаблону сайту (з тими ж скриптами, мета-тегами тощо).

Як це реалізувати правильно (Best Practice):

🏗️ Головний (батьківський) layout:


<!-- app/views/layouts/application.html.erb -->
<html>
<head><title>My App</title></head>
<body>
<header>Main Header</header>
<%= yield %>
<footer>Main Footer</footer>
</body>
</html>


🏗️ Вкладений (дочірній) layout для адмінки. Тут ми огортаємо код у render template::


<!-- app/views/layouts/admin.html.erb -->
<%= render template: "layouts/application" do %>
<div class="admin-panel-wrapper">
<aside>Admin Sidebar</aside>
<main>
<%= yield %> <!-- Сюди вставиться конкретний view адмінки -->
</main>
</div>
<% end %>


У контролері ми просто вказуємо дочірній layout:


class Admin::BaseController < ApplicationController
layout "admin"
end


Результат: Rails спочатку відрендерить view всередині admin.html.erb, а потім отриманий результат передасть як блок у application.html.erb.

Типові кейси використання:

🔹 Окремі кабінети (Admin / Dashboard / Налаштування профілю) зі своїми сайдбарами.
🔹 Мультілендінги в межах одного застосунку зі спільними assets, але різною структурою секцій.

⚠️ Важливо:
• Уникайте глибокої вкладеності (більше 2 рівнів). Код стає «спагеті», і логіку рендерингу важко дебажити.
• Якщо дочірній шаблон відрізняється лише парою блоків, краще використати content_for або render partial, аніж плодити новий вкладений layout.

👉 Nested layouts — це побудова ієрархії інтерфейсу через:


render template: "parent_layout" do
...
end


🎯 Професійний підхід:
yield і content_for — для керування атомарним контентом у межах одного layout.
Nested layouts — для побудови архітектурної ієрархії інтерфейсу без дублювання базового HTML.

🚀 Ну і нехай ваші layout’и будуть такими ж чистими, як CI після green build 🚀

TikTok | Instagram | Telegram
  • 🔥 3
More from @codica
  1. Oct 17, 2026➡️ AI став іншим! Це вже далеко не чат-бот та пошук в інтернеті Чому головний тренд зараз…
  2. Oct 17, 2026Друзі, якщо ваші стосунки з ШІ досі обмежуються промптами на кшталт «напиши рецепт борщу»…
  3. Oct 16, 2026📌 XState — коли UI-логіка перетворюється на складний набір станів і переходів isLoading,…
  4. Oct 16, 2026Коли React-проєкт стає складнішим: 4 інструменти, які варто знати Продовжуємо нашу рубрику…
  5. Oct 16, 2026Зберігайте, бо деякі самі заберемо собі в нотатки 👇 🔹 /godmode — попросити Claude видати…
  6. Oct 16, 2026Хей, друзі 👀 Прошуршали інтернет і знайшли для вас одну цікаву штуку — набір коротких ком…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →