Термин «лучшие практики» часто используется в каждой отрасли. Когда кто-то проходит ранние этапы своего образования во всем, что ему говорят, это «лучшая практика» делать определенные вещи одним способом, а не другим. Моя проблема в том, что то, что может хорошо работать для кого-то, может не работать для меня или вас. У каждого есть свои «лучшие практики», и я считаю, что каждый сам должен определить это для себя.
При этом, когда дело доходит до кодирования, я считаю, что одна из лучших практик — убедиться, что любой код, который вы пишете, должен быть максимально чистым и легко читаемым. Если мы посмотрим на программирование через призму разговора с компьютером (а это так и есть), было бы разумно сделать этот разговор легким и простым для отслеживания и понимания; похоже на то, как будет работать настоящий разговор. В Ruby on Rails есть инструмент, называемый партиалом, который помогает разделить код и легко повторно использовать его в любом приложении.
Частичные шаблоны или просто частичные шаблоны — это способ разбить процесс рендеринга на более управляемые фрагменты, а не хранить весь код в одном файле. Использование частичных кодов для разбиения кода облегчает редактирование и отладку, если вам это необходимо. Больше не нужно сканировать, казалось бы, бесконечную страницу кода в поисках ошибки. Чем меньше кода у вас в файле, тем легче его читать, поэтому редактирование и отладка становятся проще.
При запуске любого нового проекта Rails будет сгенерирован файл с именем views/layouts/application.html.erb
, который может выглядеть примерно так:
<!DOCTYPE html> <html> <head> <title>Title Goes Here</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <%= yield %> </body> </html>
Добавление любого HTML-кода к этому будет сохраняться в приложении. Часто код панели навигации или нижнего колонтитула можно увидеть в этом файле.
В этом примере я хочу добавить панель навигации или навигационную панель, чтобы пользователи могли свободно перемещаться по приложению. Чтобы построить его, я использовал пример кода из Bootstrap для чего-то, что уже было разработано и стилизовано:
<nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">Navbar</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> Dropdown </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="#">Something else here</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a> </li> </ul> <form class="d-flex"> <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success" type="submit">Search</button> </form> </div> </div> </nav>
Это много кода, и если я продолжу добавлять такие вещи, как нижние колонтитулы и тому подобное, мой файл будет слишком тесным и неуклюжим с кодом. Если попадалось что-то, что меня просили изменить, мне приходилось прочесывать один гигантский файл, чтобы что-то исправить или изменить.
Здесь на помощь приходят частичные шаблоны. Все частичные шаблоны начинаются с символа подчеркивания «_», а затем имени файла, за которым следует «.html.erb». Поэтому в папке макетов просто создайте новый файл с именем:
_navbar.html.erb
Чтобы отобразить любой фрагмент, просто замените весь код навигационной панели одной строкой в views/layouts/application.html.erb with
:
<%= render 'layouts/navbar' %>
Эта одна строка означает, что файл application.html.erb должен отображать весь код панели навигации! Например, наши 30 или около того строк кода навигационной панели были перемещены в отдельный файл, и мы сократили его до одной строки!
Давайте посмотрим на другой пример. Я создаю блог Rails, который позволяет пользователям писать свои собственные статьи. Помимо написания новых, они могут редактировать уже написанные статьи.
Моя форма для создания новой статьи выглядит так:
<h1>Create a New Article</h1> <% if @article.errors.any? %> <h2> The following errors prevented the article from being saved </h2> <ul> <% @article.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> <% end %> <%= form_with scope: :article, url: articles_path , local: true do |f| %> <p> <%= f.label :title %><br /> <%= f.text_field :title %> </p> <p> <%= f.label :description %><br /> <%= f.text_area :description %> </p> <p> <%= f.submit %> </p> <% end %>
Форма для редактирования статьи выглядит так:
<h1> Edit Article </h1> <% if @article.errors.any? %> <h2> The following errors prevented the article from being saved </h2> <ul> <% @article.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> <% end %> <%= form_with(model: @article, local: true) do |f| %> <p> <%= f.label :title %><br /> <%= f.text_field :title %> </p> <p> <%= f.label :description %><br /> <%= f.text_area :description %> </p> <p> <%= f.submit %> </p> <% end %>
Эти формы практически идентичны. В кодировании почти нет смысла писать одно и то же дважды, поэтому для очистки можно использовать партиал.
Сначала создается частичный файл:
_form.html.erb
Далее весь код, кроме заголовков h1, перемещается в партиал.
Наконец, формы New и Edit получают соответствующий код для рендеринга партиала:
Обновленная форма «Новая статья» выглядит так:
<h1>Create a new article</h1> <%= render 'form'%>
Обновленная форма редактирования статьи выглядит так:
<h1>Edit Article</h1> <%= render 'form'%>
Это отличный пример, показывающий, как партиалы могут сделать код пригодным для повторного использования. В конечном итоге это приведет к более чистому и легкому в организации коду.
Partials — отличный инструмент в Rails, позволяющий сделать код более управляемым. Они упрощают отладку и могут превращать большие фрагменты кода в многократно используемые шаблоны, чтобы избежать чрезмерного кодирования. Код, который легко читать, редактировать и изменять, делает одного счастливого программиста.