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!
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.
Voir ActionView :: ViewPaths :: ClassMethods # prepend_view_path .
class ProjectsController < ApplicationController
prepend_view_path 'app/views/mycustomfolder'
...
Vous pouvez le faire dans votre contrôleur:
def self.controller_path
"mycustomfolder"
end
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.
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 .