【问题标题】:Elegant Handling Of Multiple Views For Same Action优雅地处理同一动作的多个视图
【发布时间】:2013-10-08 17:07:14
【问题描述】:

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

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

example.com

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

admin.example.com

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

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

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

我怎样才能做到这一点,同时避免让逻辑操作员检查当前子域而乱扔我的控制器? 将每个控制器分成单独的管理员和公共风格是没有意义的,因为不同的是为indexshow 呈现的视图。

【问题讨论】:

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


    【解决方案1】:

    一种选择是为每个子域 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 方法将给定的路径添加到队列的前面,如果没有找到,它会在默认路径中搜索文件。

    警告:代码未测试

    【讨论】:

    • 不错。我完全错过了prepend_view_path
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多