Ruby on Rails
Просмотры
Поиск…
Partials
Частичные шаблоны (частичные) - это способ разбить процесс рендеринга на более управляемые куски. Частицы позволяют извлекать фрагменты кода из ваших шаблонов для разделения файлов, а также повторно использовать их во всех шаблонах.
Чтобы создать частичный, создайте новый файл, начинающийся с _form.html.erb
подчеркивания: _form.html.erb
Чтобы сделать частичное как часть представления, используйте метод рендеринга в представлении: <%= render "form" %>
- Обратите внимание, что подчеркивание не учитывается при рендеринге
- Частичный должен быть отображен с использованием его пути, если он находится в другой папке
Чтобы передать переменную в частичную как локальную переменную, используйте это обозначение:
<%= render :partial => 'form', locals: { post: @post } %>
Частицы также полезны, когда вам нужно повторно использовать точно такой же код ( концепция DRY ).
Например, для повторного использования кода <head>
, создайте частичное имя _html_header.html.erb
, введите свой <head>
код, который нужно повторно использовать, и отрисуйте частичный, когда это необходимо: <%= render 'html_header' %>
.
Частицы объектов
Объекты, которые отвечают на to_partial_path
также могут быть отображены, как в <%= render @post %>
. По умолчанию для моделей ActiveRecord это будет что-то вроде posts/post
, поэтому, фактически, рендеринга @post
, будут отображаться файлы views/posts/_post.html.erb
.
Локальная именованная post
будет автоматически назначена. В конце концов, <%= render @post %>
- это короткая рука для <%= render 'posts/post', post: @post %>
.
to_partial_path
могут быть представлены коллекции объектов, которые отвечают на to_partial_path
, например <%= render @posts %>
. Каждый элемент будет отображаться последовательно.
Глобальные Частицы
Чтобы создать глобальный фрагмент, который можно использовать в любом месте без ссылки на его точный путь, частичное должно быть расположено в пути views/application
. Предыдущий пример был изменен ниже, чтобы проиллюстрировать эту функцию.
Например, это путь к глобальному частичному app/views/application/_html_header.html.erb:
Чтобы сделать это глобальное частичное в любом месте, используйте <%= render 'html_header' %>
AssetTagHelper
Чтобы рельсы автоматически и правильно связывали ресурсы (css / js / images), в большинстве случаев вы хотите использовать встроенные помощники. ( Официальная документация )
Помощники изображения
image_path
Это возвращает путь к объекту изображения в app/assets/images
.
image_path("edit.png") # => /assets/edit.png
URL изображения
Это возвращает полный URL-адрес ресурса изображения в app/assets/images
.
image_url("edit.png") # => http://www.example.com/assets/edit.png
IMAGE_TAG
Используйте этот помощник, если вы хотите включить <img src="" />
-tag с исходным набором.
image_tag("icon.png") # => <img src="/assets/icon.png" alt="Icon" />
Помощники JavaScript
javascript_include_tag
Если вы хотите включить JavaScript-файл в свой вид.
javascript_include_tag "application" # => <script src="/assets/application.js"></script>
javascript_path
Это возвращает путь к вашему JavaScript-файлу.
javascript_path "application" # => /assets/application.js
javascript_url
Это возвращает полный URL вашего JavaScript-файла.
javascript_url "application" # => http://www.example.com/assets/application.js
Помощники стилей
stylesheet_link_tag
Если вы хотите включить CSS-файл в свой вид.
stylesheet_link_tag "application" # => <link href="/assets/application.css" media="screen" rel="stylesheet" />
stylesheet_path
Это возвращает путь к вашему ресурсу таблицы стилей.
stylesheet_path "application" # => /assets/application.css
stylesheet_url
Это возвращает полный URL-адрес вашего ресурса таблицы стилей.
stylesheet_url "application" # => http://www.example.com/assets/application.css
Пример использования
При создании нового приложения rails у вас автоматически будут два этих помощника в app/views/layouts/application.html.erb
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
Эти результаты:
// CSS
<link rel="stylesheet" media="all" href="/assets/application.self-e19d4b856cacba4f6fb0e5aa82a1ba9aa4ad616f0213a1259650b281d9cf6b20.css?body=1" data-turbolinks-track="reload" />
// JavaScript
<script src="/assets/application.self-619d9bf310b8eb258c67de7af745cafbf2a98f6d4c7bb6db8e1b00aed89eb0b1.js?body=1" data-turbolinks-track="reload"></script>
Состав
Поскольку Rails следует за шаблоном M V C Views
, где ваши «шаблоны» предназначены для ваших действий.
Допустим, у вас есть контроллер articles_controller.rb
. Для этого контроллера у вас будет папка в виде под названием app/views/articles
:
app
|-- controllers
| '-- articles_controller.rb
|
'-- views
'-- articles
| |- index.html.erb
| |- edit.html.erb
| |- show.html.erb
| |- new.html.erb
| '- _partial_view.html.erb
|
'-- [...]
Эта структура позволяет вам иметь папку для каждого контроллера. При вызове действия в контроллере соответствующее представление будет отображаться автоматически.
// articles_controller.rb
class ArticlesController < ActionController::Base
def show
end
end
// show.html.erb
<h1>My show view</h1>
Заменить HTML-код в Views
Если вы когда-либо хотели определить содержимое html, которое будет напечатано на странице во время выполнения, тогда для этого рельсы имеют очень хорошее решение. У этого есть что-то, называемое content_for, которое позволяет нам передать блок в представление рельсов. Пожалуйста, проверьте приведенный ниже пример,
Объявить content_for
<div>
<%= yield :header %>
</div>
<% content_for :header do %>
<ul>
<li>Line Item 1</li>
<li>Line Item 2</li>
</ul>
<% end %>
HAML - альтернативный способ использования в ваших представлениях
HAML (язык разметки HTML-абстракции) - это прекрасный и элегантный способ описания и дизайна HTML ваших взглядов. Вместо меток открытия и закрытия HAML использует отступы для структуры ваших страниц. В принципе, если что-то должно быть помещено в другой элемент, вы просто отступаете его, используя одну вкладку. В HAML важны вкладки и пробелы, поэтому убедитесь, что вы всегда используете одинаковое количество вкладок.
Примеры:
#myview.html.erb
<h1><%= @the_title %></h1>
<p>This is my form</p>
<%= render "form" %>
И в HAML:
#myview.html.haml
%h1= @the_title
%p
This is my form
= render 'form'
Видите ли, структура макета намного яснее, чем использование HTML и ERB.
Монтаж
Просто установите драгоценный камень, используя
gem install haml
и добавьте драгоценный камень в Gemfile
gem "haml"
Для использования HAML вместо HTML / ERB просто замените расширения файлов ваших представлений от something.html.erb
на something.html.haml
.
Быстрые подсказки
Общие элементы, такие как divs, могут быть написаны коротким образом
HTML
<div class="myclass">My Text</div>
HAML
%div.myclass
HAML, стенография
.myclass
Атрибуты
HTML
<p class="myclass" id="myid">My paragraph</p>
HAML
%p{:class => "myclass", :id => "myid"} My paragraph
Вставка кода ruby
Вы можете вставить код ruby с знаками = и -.
= link_to "Home", home_path
Код, начинающийся с =, будет выполнен и встроен в документ.
Код, начинающийся с - будет выполнен, но не вставлен в документ.
Полная документация
HAML очень легко начать, но также очень сложно, поэтому я рекомендую прочитать документацию .