Как я могу перехватить рендеринг шаблонов рельсов - PullRequest
4 голосов
/ 19 мая 2011

У меня есть приложение, которое обслуживает более одного сайта.Подобно Stack Exchange, эти несколько сайтов ведут себя очень похоже друг на друга.

Учитывая следующую структуру каталогов представлений:

views/
  shared/users/index.html.erb
  app1/users/index.html.erb
  app2/users/

Как я могу переписать рендеринг шаблона по умолчанию в Rails так,что

  • , когда вызывается индекс UsersController # в App1, он отображает app1 / users / index.html.erb
  • , когда вызывается индекс UsersController # в App2, он понимает, что индекса нет.Шаблон html.erb, поэтому для проверок shared / users / index.html.erb перед поднятием ошибки пропущенного шаблона

Заранее спасибо

Ответы [ 2 ]

8 голосов
/ 19 мая 2011

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

Если я правильно понимаю ваш вопрос, вы пытаетесь «оформить» свои взгляды в зависимости от какого-либо аспекта текущего состояния приложения. Я сделал то же самое ранее, используя этот маленький метод контроллера:

prepend_view_path "app/views/#{current_app_code}"

Добавьте это в before_filter в вашем контроллере приложений, и все ваши контроллеры будут подчиняться:

class ApplicationController < ActionController::Base
  before_filter :prepend_view_paths

  def prepend_view_paths
    prepend_view_path "app/views/#{current_app_code}"
  end

end

Теперь rails будет сначала искать «app / views / app1 / users / index.html.erb», когда «/ users» запрашивается, если «app1» является текущим приложением.

Если он не находит его там, он возвращается к местоположению по умолчанию в "app / views / users / index.html.erb".

Надеюсь, это даст вам другую альтернативу.

2 голосов
/ 19 мая 2011

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

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