2011-01-05 5 views
2

Как мне сделать рендеринг с произвольным файлом макета в моем приложении Rails 3?Рендеринг произвольных файлов макета в Rails 3

Чтение 2.2.4 Rendering Произвольный файл в http://guides.rubyonrails.org/layouts_and_rendering.html#using-render говорит мне, что это возможно для файлов (просто передать :file опцию к render вызова, который начинается с слэш.

Однако в Rails 3.0.1 это не работа для :layout вариант, который является тем, что я хотел: вынести произвольный файл в произвольной компоновки

+1

Какова цель использования произвольного файла в качестве макета? – Heikki

+0

Я действительно не понимаю ваш вопрос, вы говорите, что он работает для варианта: layout, а затем скажет, что вы хотели. Вы имели в виду, что не работают? – hornairs

+0

Не знаете, что такое произвольный файл макета, пожалуйста, уточните. – jschorr

ответ

1

Попробуйте

render :template => '/absolute/path/to/template' 
.

Имейте в виду, что если в этом документе нет <%= yield %>, ничего не будет отображаться иначе, чем содержимое этого файла. Могу ли я спросить, почему вы это делаете? Если вы пытаетесь загрузить файл или просмотреть файл, это не лучший способ ...

+0

Это работает? Это из-за первой косой черты? Слишком ленив, чтобы проверить это сам .. :) – Heikki

+0

да, это работает ... его называют абсолютной ссылкой пути ... – sethvargo

+0

Ну, я знаю это: D. Я не заметил ничего в документах относительно шаблонов вне папки шаблонов. Возможно, это темный план для «промывания мозгов» для всех, чтобы использовать RAILS CONVENTIONS (что не так уж плохо). – Heikki

3

Другой способ сделать это просто добавить «макеты» где-то на пути к макету , Это кажется смешным, но Rails добавит только префикс «layouts /», если он еще не находится в пути.

# rails/lib/abstract_controller/layouts.rb:268 
# out of context, but here in all it's glory 
_prefix = "layouts" unless _implied_layout_name =~ /\blayouts/ 

Просто, чтобы убедиться, что я ясно здесь, вот пример:

# your layout at app/themes/foobar/layouts/foobar.html.erb 
layout Rails.root.join('app/themes/foobar/layouts/foobar').to_s 
     #=> renders /path/to/your/app/themes/foobar/layouts/foobar.html.erb 
+0

Очень приятно @coreyward! И я согласен: «Это кажется смешным». Сделайте ваши пути ДОЛЖНЫ закончить в «layouts /». –

Смежные вопросы