Подтвердить что ты не робот

Где помещать частичные данные, разделяемые всем приложением в Rails?

Где я могу разместить частичные файлы, разделяемые более чем одной моделью? У меня есть страница с именем crop.html.erb, которая используется для одной модели - Photo. Теперь я хотел бы использовать его для другой модели с именем User.

Я мог бы скопировать и вставить код, но это не очень СУХОЙ, поэтому я решил, что переместил бы его в частичный.

Так как он делился между двумя моделями - где бы я разместил это частичное?

Спасибо!

4b9b3361

Ответ 1

Соглашение Rails состоит в том, чтобы поместить общие части в /app/views/shared.

Ответ 2

Обновление

Наследование макетов теперь находится в руководствах в макете и рендеринге Наследование шаблонов работает аналогично.

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, который будет выполнен, это будет откат для всех отсутствующих партикулов, и я не могу проверить прямо сейчас, но я думаю даже для самого шаблона...

Railscast: наследование шаблона!

Ответ 3

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.

Ответ 4

В Rails View используется app/views/layouts для разделяемых частей, таких как верхний и нижний колонтитулы, но в Ruby on Rails Guide используется app/views/shared в пример. Я думаю, это сводится к личным предпочтениям. Я использовал бы layouts для высокоуровневых материалов, таких как главный навигатор или нижний колонтитул, но shared для более узких элементов уровня контроллера, таких как форма.

Ответ 5

У меня есть общая папка в моих представлениях, которая содержит обычно используемые части.

Ответ 6

Неважно, где вы их помещаете. Вы можете отобразить любое частичное в любом произвольном месте, указав путь к файлу render - его не нужно связывать с контроллером, который его выполняет. Я использую каталог, просто называемый partials в каталоге view, и вызываю частично в нем следующим образом:

render :partial => 'partials/mypartial'