Можно ли получить список доступных раскладок в рельсах (в том числе из двигателей)?
Я разрешаю администраторам выбирать другой макет для своей страницы. Прямо сейчас это просто текстовый ввод, и они вводят имя. Это означает, что они должны знать имя заранее.
Если они сделают опечатку, это вызовет исключение, поэтому я проверяю, существует ли макет, выполнив следующие действия в контроллере, и, если он не существует, по умолчанию используется "application".
lookup_context.template_exists?(@page.layout, "layouts")
Если я могу получить список макетов, мне больше не нужно проверять контроллер.
Я просмотрел actionview и ничего не нашел. Я мог бы использовать Dir для получения списка файлов макетов, но мне нужны все макеты из включенных движков.
Поэтому мне интересно, если кто-нибудь знает способ создания списка всех доступных макетов, в том числе из движков?
1 ответ
По договоренности все макеты присутствуют в app/views/layouts
каталог. Макеты, доступные вам по умолчанию, являются файлами, присутствующими в этом каталоге. Чтобы получить список макетов, попробуйте это:
@layouts = Dir.glob('app/views/layouts/*')
for layout in @layouts
puts layout
end
Если вы определили собственный путь к движкам в своем приложении, как описано здесь, вам придется явно добавить эти макеты:
@layouts << Dir.glob('custom_engine_path/*')