Как изменить путь к файлу просмотра по умолчанию в контроллере 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
Обратите внимание, что я не изменяю каждый метод с помощью render
, но определяя путь по умолчанию для всех них. Это возможно? Если да, то как?
Спасибо!
Ответы
Ответ 1
Если для этого нет встроенного метода, возможно, вы можете переопределить render
для этого контроллера?
class MyController < ApplicationController
# actions ..
private
def render(*args)
options = args.extract_options!
options[:template] = "/mycustomfolder/#{params[:action]}"
super(*(args << options))
end
end
Не уверен, насколько хорошо это работает на практике, или если оно вообще работает.
Ответ 2
См. ActionView:: ViewPaths:: ClassMethods # prepend_view_path.
class ProjectsController < ApplicationController
prepend_view_path 'app/views/mycustomfolder'
...
Ответ 3
Вы можете сделать это внутри своего контроллера:
def self.controller_path
"mycustomfolder"
end
Ответ 4
Вы можете добавить что-то вроде:
paths.app.views << "app/views/myspecialdir"
в файле config/application.rb, чтобы иметь рельсы в другом каталоге для просмотра шаблонов. Одно из предостережений заключается в том, что он все равно будет искать файлы просмотра, соответствующие контроллеру. Поэтому, если у вас есть контроллер с именем HomeController с вышеуказанной конфигурацией для представлений, он будет искать что-то под названием "app/views/myspecialdir/home/index.html.erb" для рендеринга.