如何拦截轨道的模板渲染



我有一个应用程序服务于多个网站。与Stack Exchange类似,这几个站点的行为非常相似。

给定以下视图目录结构:

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

如何在 Rails 中重写默认模板渲染,以便

  • 当调用 App1 的 UsersController#index 时,它会呈现 app1/users/index.html.erb
  • 当调用 App2 的用户控制器#索引时,它意识到没有 index.html.erb 模板,因此在引发缺少模板错误之前检查共享/用户/索引.html.erb

提前致谢

我知道您已经接受了这个问题的答案,但我认为您不需要创建自己的模板解析器。

如果我正确理解了您的问题,那么您正在尝试根据应用程序当前状态的某些方面来"主题"您的观点。我以前使用这个花花公子的小控制器方法做过同样的事情:

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

现在,如果"app1"是当前应用程序,则当请求"/users"时,rails 将首先查找"app/views/app1/users/index.html.erb"。

如果在那里找不到它,它会回滚到"app/views/users/index.html.erb"的默认位置。

希望这能给你另一种选择。

我相信

你必须编写自己的模板解析器。也许这篇博文可以提供帮助。

相关内容

  • 没有找到相关文章

最新更新