Yuv*_*rmi 44 ruby model-view-controller ruby-on-rails ruby-on-rails-3
我有一个控制器叫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
Run Code Online (Sandbox Code Playgroud)
请注意我并没有更改每个方法,render而是为所有方法定义默认路径.这可能吗?如果是这样,怎么样?
谢谢!
mme*_*ell 47
请参阅ActionView :: ViewPaths :: ClassMethods #prepend_view_path.
class ProjectsController < ApplicationController
prepend_view_path 'app/views/mycustomfolder'
...
Run Code Online (Sandbox Code Playgroud)
Rav*_*ine 30
您可以在控制器内执行此操作:
def self.controller_path
"mycustomfolder"
end
Run Code Online (Sandbox Code Playgroud)
Aug*_*aas 22
如果没有内置方法,也许您可以覆盖render该控制器?
class MyController < ApplicationController
# actions ..
private
def render(*args)
options = args.extract_options!
options[:template] = "/mycustomfolder/#{params[:action]}"
super(*(args << options))
end
end
Run Code Online (Sandbox Code Playgroud)
不确定这在实践中是如何运作的,或者它是否有效.
Mik*_*ski 11
您可以添加以下内容:
paths.app.views << "app/views/myspecialdir"
Run Code Online (Sandbox Code Playgroud)
在config/application.rb文件中,让rails在另一个目录中查看视图模板.需要注意的是,它仍然会查找与控制器匹配的视图文件.因此,如果您有一个名为HomeController的控制器,其中包含上述视图配置,那么它将查找名为"app/views/myspecialdir/home/index.html.erb"的内容进行渲染.