Ruby on Rails: как указать не относительный путь к макету при вызове рендера? - PullRequest
2 голосов
/ 19 февраля 2010

(Rails версия 2.3.2)

По умолчанию параметр: layout для рендера берет относительный путь и добавляет его в каталог макета по умолчанию ("app / views / layout").

Например:

render :file => '../resources/website/home_page.html.erb', :layout => '../../../../resources/website/layout'

"Если для имени шаблона не указан каталог, шаблон будет по умолчанию найден в app / views / layouts /. В противном случае он будет найден относительно корня шаблона."

http://api.rubyonrails.org/classes/ActionController/Layout/ClassMethods.html

Тем не менее, вышеперечисленное работает только в режиме разработки и останавливается в работе, не найдя шаблон. Исключение: ActionView :: MissingTemplate

В любом случае, я бы предпочел указать прямой путь к файлу макета.

(Идея состоит в том, чтобы сохранить указанный файл макета отдельно от основных видов проекта в виде подключаемого модуля.)

Возможно ли это?

Я мог бы временно (только экземпляр) переопределить метод "default_layout" в ActionController :: Layout? (Но я не уверен, как?)

Спасибо за чтение.

Ответы [ 3 ]

2 голосов
/ 23 февраля 2010

Если вам нужно разрешить макет для запроса, попробуйте:

class ApplicationController < ActionController::Base
  layout :resolve_layout

  # some definitions

protected

  def resolve_layout
    # some logic depending on current request
    path_to_layout = RAILS_ROOT + "/path/to/layout"
    return path_to_layout
  end

end

Надеюсь, это то, что вам нужно.

0 голосов
/ 03 марта 2010

Вы, возможно, можете добавить к путям просмотра контроллера ( см. Здесь ), чтобы ваше приложение могло выбирать шаблоны из разных каталогов.Это также может вылечить другие странные пути к шаблонам.

Если вы хотите абсолютные пути, используйте RAILS_ROOT, как предлагается здесь.Если вы хотите поделиться взглядами из плагина, вы также можете попробовать плагин rails-engine .

Но также помните, что Rails (вроде намеренно) затрудняет выполнение странных вещей,Если у вас нет действительно веских причин, чтобы поступить иначе, вы будете наслаждаться более плавной ездой, придерживаясь значений по умолчанию.

0 голосов
/ 19 февраля 2010

Вероятно, единственный хороший способ сделать это - создать константу в вашей среде. Rb с указанием пути к любой ячейке, на которой вы находитесь. Так что-то вроде

LAYOUT_PATH = '/var/www/templates'

Другой вариант - хранить шаблоны в правильном каталоге, но использовать svn external или эквивалент в выбранной вами SCM, чтобы поддерживать этот каталог шаблонов в актуальном состоянии для всех других сайтов, использующих те же шаблоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...