¿Cómo cambiar la ruta predeterminada de los archivos de vista en un controlador Rails 3?

Tengo un controlador llamado ProjectsController . Sus acciones, por defecto, buscan vistas dentro de la app/views/projects . Me gustaría cambiar esa ruta para todos los métodos ( index , show , new , edit , etc.) en el controlador.

Por ejemplo:

 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 

Tenga en cuenta que no estoy cambiando cada método con render sino que defino una ruta predeterminada para todos ellos. es posible? ¿Si es así, cómo?

¡Gracias!

Si no hay un método incorporado para esto, ¿quizás puede anular el render para ese controlador?

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

No estoy seguro de qué tan bien funciona esto en la práctica, o si funciona en absoluto.

Ver ActionView :: ViewPaths :: ClassMethods # prepend_view_path .

 class ProjectsController < ApplicationController prepend_view_path 'app/views/mycustomfolder' ... 

Puedes hacer esto dentro de tu controlador:

  def self.controller_path "mycustomfolder" end 

Puede agregar algo como:

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

en el archivo config / application.rb para que los Rails se vean en otro directorio para ver las plantillas. La única advertencia es que seguirá buscando archivos de vista que coincidan con el controlador. Entonces, si tiene un controlador llamado HomeController con la configuración anterior para las vistas, buscará algo llamado "app / views / myspecialdir / home / index.html.erb" para renderizar.

Si desea cambiar la ruta predeterminada para todas sus vistas a nivel de aplicación, podría hacer algo como seguir:

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

Y escriba todas sus vistas en la carpeta new_views siguiendo la misma estructura de directorios que el original.

PD: esta respuesta está inspirada en la respuesta de @mmell .