0

我有一个包含大量资源的 Rails 应用程序。

该应用程序分为两部分:裸域中存在一个面向公众的区域:

example.com

管理员版本位于 admin 子域中:

admin.example.com

每个资源控制器都有标准的 CRUD 操作,可供登录并位于 admin 子域中的管理员用户使用,包括特定于管理员的视图indexshow操作。

面向公众的区域也有针对每个资源的操作,但它们的视图与管理员视图有index很大不同show

所以我需要根据子域为每个资源显示不同index的视图。show

我怎样才能做到这一点,同时避免用检查当前子域的逻辑运算符乱扔我的控制器?将每个控制器拆分为单独的 admin 和 public 风格是没有意义的,因为不同的是为index和呈现的视图show

4

1 回答 1

2

一种选择是为每个子域创建一个视图文件夹, app/views/admin并将该子域的所有视图文件放入其中,例如app/views/admin/foos/index.html.erb.

然后使用prepend_view_path更改基于子域的路径,如下所示:

 class ApplicationController < ActionController::Base
   before_filter :prepend_view_paths

   def prepend_view_paths
     subdomain = request.subdomain 
     prepend_view_path "app/views/#{subdomain}"
   end
 end

prepend 方法将给定的路径添加到队列的前面,如果找不到,它会在默认路径中搜索文件。

警告:代码未经测试

于 2013-10-08T19:14:17.623 回答