How to change the default path of view files in a Rails 3 controller?

前端 未结 5 2100
甜味超标
甜味超标 2020-12-01 06:16

I have a controller called ProjectsController. Its actions, by default, look for views inside app/views/projects. I\'d like to change that path for

相关标签:
5条回答
  • 2020-12-01 06:28

    You can add something like:

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

    in the config/application.rb file to have rails look in another directory for view templates. The one caveat is that it'll still look for view files that match the controller. So if you have a controller named HomeController with the above config for the views it'll look for something named "app/views/myspecialdir/home/index.html.erb" to render.

    0 讨论(0)
  • 2020-12-01 06:31

    You can do this inside your controller:

      def self.controller_path
        "mycustomfolder"
      end
    
    0 讨论(0)
  • 2020-12-01 06:35

    See ActionView::ViewPaths::ClassMethods#prepend_view_path.

    class ProjectsController < ApplicationController
        prepend_view_path 'app/views/mycustomfolder'
        ...
    
    0 讨论(0)
  • 2020-12-01 06:38

    If there's no built-in method for this, perhaps you can override render for that controller?

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

    Not sure how well this works out in practice, or if it works at all.

    0 讨论(0)
  • 2020-12-01 06:43

    If you want to change the default path for all your views at app level, you could do something like following -

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

    And write all your views in the folder new_views following the same directory structure as original.

    P.S. - This answer is inspired from @mmell's answer.

    0 讨论(0)
提交回复
热议问题