В 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.