Bonjour,
ce que je veux faire c'est ne pas avoir le bordel dans le dossier views de mes pages statics.
Pour cela je créer des sous-dossiers mais du coup rails ne trouve plus mes .html.erb.
dans un premier temps je défini mes actions:
class PagesController < ApplicationController
def welcome
end
def administration
end
def administration_users
end
end
et je crée mes routes.
PagesController.action_methods.each do |action|
path = action.split('_').join('/')
get "/#{path}", to: "pages##{action}", as: "#{action}_page"
end
Easy, fastoche, ça fonctionne tout seul. \0/
Mais la ou c'est un peu problematique c'est au moment du rendu de la vue.
Car (si j'ai bine compris) Rails va automatique chercher une vue qui correspond au nom de l'action qui est dans le controller.
Je peux outrepasser ça en spécifiant dans mon action
def administration_users
render "pages/administration/users"
end
et cela fonctionne comme souhaité (youpi) mais cela va être relativement chiant à gerer.
Comment puis-je faire une fonction qui ferais un render automatiquement si l'action à un "_". (pour les views de premier niveau on peut garder le fonctionne de rails par defaut)
Merci
Pourquoi pas quelquechose comme ceci (pas testé):
def auto_render
render [controller_name.classify.lowercase.pluralize, __method__.to_s.split('_')].join('/')
end
Je suis pas sur si le join va marcher comme je le prévoi mais bon..
Cordialement,
TD
J'ai modifié
render [controller_name, action_name.to_s.split('_')].join('/')
method retourne auto/render. :)
For versions >= 1.9:
def funky_method
return __callee__
end
For versions < 1.9:
def funky_method
return __method__
end
mais la je ne sais pas after_action ou before_action ?
before_action :auto_render, if:->{action_name.to_s.in? "_"}
after_action :auto_render, if:->{action_name.to_s.in? "_"}
pour que les variables dans les différentes method soit accessible dans les pages.
genre ça :
def administration_users
@users = User.all
end
Je ne pense pas que tu puisse insérer un evenement après le traitement de la méthode et avant le render. A mon avis tu va devoir appeler la fonction à la place du render.
Après j'ai trouvé un tuto pour un before render concern mais je sais pas s'il est toujours d'actualité. ( ici)
Ok merci pour ta réponse en soit c'est tres clair pour ma part on a déjà une api et j'ai commencé a lire la doc vue js donc je vois comment rendre le tout. google street view