Можно ли получить список доступных раскладок в рельсах (в том числе из двигателей)?

Я разрешаю администраторам выбирать другой макет для своей страницы. Прямо сейчас это просто текстовый ввод, и они вводят имя. Это означает, что они должны знать имя заранее.

Если они сделают опечатку, это вызовет исключение, поэтому я проверяю, существует ли макет, выполнив следующие действия в контроллере, и, если он не существует, по умолчанию используется "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/*')
Другие вопросы по тегам