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

我有一个名为ProjectsController的控制器。 它的动作,默认情况下,在app/views/projects寻找视图。 我想在控制器中更改所有方法( indexshownewedit等)的path。

例如:

 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每个方法,但定义了所有的默认path。 这可能吗? 如果是这样,怎么样?

谢谢!

如果没有内置的方法,也许你可以覆盖该控制器的render

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

不知道这在实践中有多好,或者是否一切正常。

请参阅ActionView :: ViewPaths :: ClassMethods#prepend_view_path 。

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

你可以在你的控制器里面这样做:

  def self.controller_path "mycustomfolder" end 

你可以添加如下内容:

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

在config / application.rb文件中,让rails在另一个目录中查看视图模板。 一个警告是,它仍然会查找匹配控制器的视图文件。 所以,如果你有一个名为HomeController的控制器,并且具有上述的视图configuration,它将查找名为“app / views / myspecialdir / home / index.html.erb”的东西来渲染。