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 all methods (index, show, new, edit etc...) in the controller.
For example:
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
Please note I am not changing each method with render but defining a default path for all of them. Is this possible? If so, how?
Thank you!
Rails routing is a two-way piece of machinery – rather as if you could turn trees into paper, and then turn paper back into trees. Specifically, it both connects incoming HTTP requests to the code in your application's controllers, and helps you generate URLs without having to hard-code them as strings.
See ActionView::ViewPaths::ClassMethods#prepend_view_path.
class ProjectsController < ApplicationController
    prepend_view_path 'app/views/mycustomfolder'
    ...
                        You can do this inside your controller:
  def self.controller_path
    "mycustomfolder"
  end
                        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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With