Передача блоков кода из частичного в View Yield в Rails: подробное руководство

В Rails частичные фрагменты — это удобный способ повторного использования фрагментов кода в нескольких представлениях. Одной из мощных особенностей партиалов является возможность передавать блоки кода, также известные как блоки кода, из партиала в представление с помощью ключевого слова yield. В этой статье мы углубимся в эту тему и рассмотрим различные методы достижения этой цели в Rails. Итак, хватайте свой любимый напиток и начнем!

Метод 1: использование ключевого слова yield
Первый и самый простой метод — использовать ключевое слово yieldвнутри партиала. Допустим, у нас есть партиал с именем _sidebar.html.erb, которому мы хотим передать блок кода. Вот пример:

# _sidebar.html.erb
<div class="sidebar">
  <% yield %>
</div>

Теперь, на ваш взгляд, вы можете передать блок кода в партиал следующим образом:

<%= render partial: 'sidebar' do %>
  <h2>Recent Posts</h2>
  <ul>
    <% Post.recent.each do |post| %>
      <li><%= link_to post.title, post_path(post) %></li>
    <% end %>
  </ul>
<% end %>

При использовании ключевого слова yieldблок кода внутри представления будет вставлен в партиал в позиции yield.

Метод 2: передача параметров в партиал
Иногда вам может потребоваться передать дополнительные параметры в партиал вместе с блоком кода. В таких случаях вы можете изменить частичный фрагмент и явно передать параметры. Вот пример:

# _sidebar.html.erb
<div class="sidebar">
  <% yield recent_posts %>
</div>

В представлении теперь можно передавать как блок кода, так и дополнительные параметры:

<%= render partial: 'sidebar', locals: { recent_posts: Post.recent } do |posts| %>
  <h2>Recent Posts</h2>
  <ul>
    <% posts.each do |post| %>
      <li><%= link_to post.title, post_path(post) %></li>
    <% end %>
  </ul>
<% end %>

Метод 3: использование тега контента
Rails предоставляет помощник content_tag, который позволяет создавать собственные теги для контента. Вы можете использовать этот помощник для достижения тех же функций, что и при передаче блоков кода. Вот пример:

# _sidebar.html.erb
<div class="sidebar">
  <%= content_tag(:div, class: 'custom-content') do %>
    <% yield %>
  <% end %>
</div>

В представлении вы можете передать блок кода в пользовательский тег:

<%= render partial: 'sidebar' do %>
  <h2>Recent Posts</h2>
  <ul>
    <% Post.recent.each do |post| %>
      <li><%= link_to post.title, post_path(post) %></li>
    <% end %>
  </ul>
<% end %>

Инструкция yieldвставит блок кода внутрь блока content_tag.

В этой статье мы рассмотрели различные методы передачи блоков кода из партиалов для просмотра доходности в Rails. Используя ключевое слово yield, передавая параметры или используя помощник content_tag, вы можете получить гибкий и многократно используемый код в ваших представлениях. Поэкспериментируйте с этими методами в зависимости от вашего конкретного варианта использования и наслаждайтесь преимуществами чистого и удобного в сопровождении кода в ваших приложениях Rails.