Как изменить стандартный путь просмотра файлов в контроллере Rails 3? - PullRequest
43 голосов
/ 29 ноября 2010

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

Спасибо!

Ответы [ 5 ]

47 голосов
/ 09 октября 2012

См. ActionView :: ViewPaths :: ClassMethods # prepend_view_path .

class ProjectsController < ApplicationController
    prepend_view_path 'app/views/mycustomfolder'
    ...
28 голосов
/ 08 августа 2014

Вы можете сделать это внутри вашего контроллера:

  def self.controller_path
    "mycustomfolder"
  end
21 голосов
/ 29 ноября 2010

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

class MyController < ApplicationController
  # actions ..

  private

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

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

11 голосов
/ 29 ноября 2010

Вы можете добавить что-то вроде:

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

в файле config / application.rb, чтобы рельсы искали в другом каталоге шаблоны для просмотра.Единственное предостережение в том, что он все равно будет искать файлы, соответствующие контроллеру.Поэтому, если у вас есть контроллер с именем HomeController с вышеуказанным конфигом для представлений, он будет искать что-то с именем «app / views / myspecialdir / home / index.html.erb» для визуализации.

1 голос
/ 26 апреля 2018

Если вы хотите изменить путь по умолчанию для всех ваших представлений на уровне приложения, вы можете сделать что-то вроде следующего:

class ApplicationController < ActionController::Base
  before_action :set_views

  private

  def set_views
    prepend_view_path "#{Rails.root.join('app', 'views', 'new_views')}"
  end
end

И записать все ваши представления в папке new_views, следующей за той же директориейструктура как оригинал.

PS - Этот ответ основан на ответе @ mmell .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...