13-09-2011, 04:23 PM
(Modification du message : 13-09-2011, 04:40 PM par Sephi-Chan.)
(13-09-2011, 02:29 PM)popayan a écrit : Je vais répondre pour le "request.post?" (je suis certainement (encore) à coté de la plaque mais bon...) :
-> Je veux avoir sur ma page d'accueil 2 formulaires : celui d'inscription et celui de connexion
-> S'il y a une erreur pdt la saisie d'un des formulaires, l'utilisateur est redirigé vers la page spécifique au formulaire (par exemple /register) et on affiche les erreurs sur cette page.
...
-> En essayant d'expliquer, je me rends compte que ce n'est plus très clair dans mon esprit... :/ Je me souviens que cette "astuce" permettait de me sortir d'un problème mais je ne me souviens plus duquel...
Si tu as 2 formulaires sur la page d'accueil et que tu veux un rendu correct des erreurs, tu as juste à initialiser les variables utilisées dans la vue que tu rends. Prenons un exemple.
Admettons que ta page d'accueil (application#home) affiche les 2 formulaires et les 5 dernières news. Pour rendre la vue, tu as besoin de 3 variables : @user, @user_session et @posts.
class ApplicationController < ActionController::Base
def home
@user = User.new
@session = UserSession.new
@posts = Post.recent.limit(5)
end
end
Jusque là, c'est cool. Le problème, dès que tu feras un render 'application/home', Rails criera pour te dire que certaines variables ne sont pas définies. Or, tu n'as pas envie d'initialiser manuellement ces variable dans l'action create des contrôleurs sessions et users : le copier/coller est l'ennemi du développeur.
Heureusement, il existe une solution simple : exposer ces données dans des méthodes du contrôleur qui seront exposées à la vue.
class ApplicationController < ActionController::Base
helper_method :new_user, :new_session, :recent_posts
def home
end
private
def new_user
@new_user ||= User.new(params[:user] || {})
end
def new_session
@new_session ||= UserSession.new(params[ession] || {})
end
def recent_posts
@recent_posts ||= Post.recent.limit(5)
end
end
Maintenant, dans la vue tu peux utiliser ces méthodes new_user, new_session et recent_posts à la place des variables ! Et j'utilise la memoization (via le ||=) pour éviter de refaire des objets ou des requêtes.
Voilà, ça c'est une astuce de champion que tu pouvais difficilement deviner tout seul.
Malin comme Maped ! Maped !