代码之家  ›  专栏  ›  技术社区  ›  Yuval Karmi

如何更改Rails 3控制器中视图文件的默认路径?

  •  43
  • Yuval Karmi  · 技术社区  · 14 年前

    我有一个叫 ProjectsController . 默认情况下,它的操作会在内部查找视图 app/views/projects . 我想改变所有方法的路径( index , show , new , edit 在控制器中。

    例如:

    class ProjectsController < ApplicationController
    
      #I'd like to be able to do something like this
      views_path 'views/mycustomfolder'
    
      def index
        #some code
      end
    
      def show
        #some code
      end
    
      def new
        #some code
      end
    
      def edit
        #some code
      end
    end
    

    请注意,我不会用 render 但要为所有这些文件定义一个默认路径。这可能吗?如果是,怎么做?

    谢谢您!

    5 回复  |  直到 14 年前
        1
  •  22
  •   Andrew Ferk    13 年前

    如果没有用于此的内置方法,也许可以重写 render 为了那个控制器?

    class MyController < ApplicationController
      # actions ..
    
      private
    
      def render(*args)
        options = args.extract_options!
        options[:template] = "/mycustomfolder/#{params[:action]}"
        super(*(args << options))
      end
    end
    

    不确定这在实践中效果如何,或者它是否有效。

        2
  •  47
  •   Alexander Ryhlitsky mmell    6 年前

    ActionView::ViewPaths::ClassMethods#prepend_view_path .

    class ProjectsController < ApplicationController
        prepend_view_path 'app/views/mycustomfolder'
        ...
    
        3
  •  30
  •   Ten Bitcomb    10 年前

    您可以在控制器中执行此操作:

      def self.controller_path
        "mycustomfolder"
      end
    
        4
  •  11
  •   wingfire    13 年前

    您可以添加如下内容:

    paths.app.views << "app/views/myspecialdir"
    

    在config/application.rb文件中,让rails在另一个目录中查找视图模板。唯一需要注意的是,它仍然会查找与控制器匹配的视图文件。因此,如果您有一个名为HomeController的控制器,并且具有上述视图配置,那么它将查找要呈现的名为“app/views/myspecialdir/home/index.html.erb”的内容。

        5
  •  1
  •   Swaps    6 年前

    如果要在应用程序级别更改所有视图的默认路径,可以执行以下操作-

    class ApplicationController < ActionController::Base
      before_action :set_views
    
      private
    
      def set_views
        prepend_view_path "#{Rails.root.join('app', 'views', 'new_views')}"
      end
    end
    

    把你所有的观点都写在文件夹里 new_views 遵循与原始目录相同的目录结构。

    P.S.-这个答案的灵感来自 @mmell 的答案。