Подтвердить что ты не робот

Как изменить путь к файлу просмотра по умолчанию в контроллере 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, но определяя путь по умолчанию для всех них. Это возможно? Если да, то как?

Спасибо!

4b9b3361

Ответ 1

Если для этого нет встроенного метода, возможно, вы можете переопределить render для этого контроллера?

class MyController < ApplicationController
  # actions ..

  private

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

Не уверен, насколько хорошо это работает на практике, или если оно вообще работает.

Ответ 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" для рендеринга.