优雅处理同一行动的多个视图

时间:2013-10-08 17:07:15

标签: ruby-on-rails ruby ruby-on-rails-3 views controllers

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

该应用程序分为两部分:裸域中存在公共区域:

example.com

管理员版本驻留在管理员子域名中:

admin.example.com

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

面向公众的区域对每个资源也有indexshow个操作,但他们的观点与管理视图的非常不同。

因此,我需要针对每个资源显示不同的indexshow视图,具体取决于子域。

如何在逻辑运算符检查当前子域的同时避免乱丢我的控制器?将每个控制器拆分为单独的管理员和公共口味是没有意义的,因为所有不同的是为indexshow呈现的视图。

1 个答案:

答案 0 :(得分: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方法将给定路径添加到队列的前面,如果找不到,则会在默认路径中搜索该文件。

警告:代码未经过测试