web-dev-qa-db-fra.com

Comment changer le chemin par défaut des fichiers de vue dans un contrôleur Rails 3?

J'ai un contrôleur appelé ProjectsController. Ses actions, par défaut, recherchent des vues dans app/views/projects. J'aimerais changer ce chemin pour toutes les méthodes (index, show, new, edit etc ...) dans le contrôleur.

Par exemple:

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

Veuillez noter que je ne change pas chaque méthode avec render, mais que je définis un chemin par défaut pour toutes. Est-ce possible? Si c'est le cas, comment?

Je vous remercie!

43
Yuval Karmi

S'il n'y a pas de méthode intégrée pour cela, vous pouvez peut-être remplacer render pour ce contrôleur?

class MyController < ApplicationController
  # actions ..

  private

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

Je ne sais pas si cela fonctionne bien dans la pratique ou si cela fonctionne du tout.

21
August Lilleaas

Voir ActionView :: ViewPaths :: ClassMethods # prepend_view_path .

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

Vous pouvez le faire dans votre contrôleur:

  def self.controller_path
    "mycustomfolder"
  end
28
Ravenstine

Vous pouvez ajouter quelque chose comme:

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

dans le fichier config/application.rb pour que Rails recherche dans un autre répertoire les modèles de vue. Le seul inconvénient est qu'il recherchera toujours les fichiers d'affichage qui correspondent au contrôleur. Donc, si vous avez un contrôleur nommé HomeController avec la configuration ci-dessus pour les vues, il recherchera quelque chose nommé "app/views/myspecialdir/home/index.html.erb" à rendre.

11
Mike Gorski

Si vous souhaitez modifier le chemin d'accès par défaut pour toutes vos vues au niveau de l'application, vous pouvez procéder comme suit:

class ApplicationController < ActionController::Base
  before_action :set_views

  private

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

Et écrivez toutes vos vues dans le dossier new_views en suivant la même structure de répertoires que celle d'origine.

P.S. - Cette réponse s’inspire de @mmell .

1
Swaps