Ответ 1
Соглашение Rails состоит в том, чтобы поместить общие части в /app/views/shared
.
Где я могу разместить частичные файлы, разделяемые более чем одной моделью?
У меня есть страница с именем crop.html.erb
, которая используется для одной модели - Photo
.
Теперь я хотел бы использовать его для другой модели с именем User
.
Я мог бы скопировать и вставить код, но это не очень СУХОЙ, поэтому я решил, что переместил бы его в частичный.
Так как он делился между двумя моделями - где бы я разместил это частичное?
Спасибо!
Соглашение Rails состоит в том, чтобы поместить общие части в /app/views/shared
.
Обновление
Наследование макетов теперь находится в руководствах в макете и рендеринге Наследование шаблонов работает аналогично.
Rails 3.1 и следующие версии реализуют наследование шаблонов, поэтому я думаю, что правильное место для общих партиций теперь /app/views/application/
, скажем, вы находитесь в products#index
, вы можете сделать следующее:
-# products#index
= render @products.presence || 'empty'
-# /app/views/application/_empty.html.haml
There are no items
btw it application
, потому что соединение является наследованием контроллера, поэтому это предполагает ProductsController < ApplicationController
Таким образом, если вы реализуете /app/views/products/_empty.html.haml
, который будет выполнен, это будет откат для всех отсутствующих партикулов, и я не могу проверить прямо сейчас, но я думаю даже для самого шаблона...
TL; DR
Rails 3.1, Rails 4, Rails 5 и все, что будет дальше
app/views/application
Двигатель автоматически ищет этот путь, если вид не найден в пути контроллера.
Рельсы 3 и ранее
app/views/shared
Двигатель НЕ ищет этот путь автоматически.
Длинная история
Rails 3 (и предыдущая версия) имеют не умолчанию местоположение для хранения общих просмотров.
Неофициальное соглашение - хранить общие представления в приложении/представлениях/общих. В любом случае, если вы их сохранили, вы должны указать путь
# render app/views/shared/menu.html.erb
<%= render :partial => "shared/menu" %>
Это предложение было популяризировано Agile Web Development с Rails.
Rails 3.1 представляет официальный < официальный стандарт для хранения общих просмотров:
приложение/просмотров/приложениеБлагодаря этому стандарту, двигатель теперь автоматически ищет шаблоны в приложении/представлениях/приложении. В результате вам больше не нужно использовать полный путь.
Те любопытные могут последовать здесь за этим решением.
Старый синтаксис
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render :partial => "menu" %>
Новый синтаксис
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render partial: "menu" %>
Конечно, вы все равно можете размещать свои общие представления везде, где хотите, и ссылаться на них по пути
<%= render :partial => "my_own_special_shared_folder/menu" %>
Если у вас нет оснований для этого, пожалуйста, придерживайтесь нового стандарта и сохраняйте общие представления в app/views/application
.
В Rails View используется app/views/layouts
для разделяемых частей, таких как верхний и нижний колонтитулы, но в Ruby on Rails Guide используется app/views/shared
в пример. Я думаю, это сводится к личным предпочтениям. Я использовал бы layouts
для высокоуровневых материалов, таких как главный навигатор или нижний колонтитул, но shared
для более узких элементов уровня контроллера, таких как форма.
У меня есть общая папка в моих представлениях, которая содержит обычно используемые части.
Неважно, где вы их помещаете. Вы можете отобразить любое частичное в любом произвольном месте, указав путь к файлу render
- его не нужно связывать с контроллером, который его выполняет. Я использую каталог, просто называемый partials
в каталоге view
, и вызываю частично в нем следующим образом:
render :partial => 'partials/mypartial'