JeuWeb - Crée ton jeu par navigateur
[Rails] Pourquoi ce validates_confirmation_of ne fonctionne pas ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Rails] Pourquoi ce validates_confirmation_of ne fonctionne pas ? (/showthread.php?tid=5689)

Pages : 1 2


RE: [Rails] Pourquoi ce validates_confirmation_of ne fonctionne pas ? - Sephi-Chan - 13-09-2011

(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[Confusedession] || {})
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 !


RE: [Rails] Pourquoi ce validates_confirmation_of ne fonctionne pas ? - popayan - 13-09-2011

ok, merci. je vais regarder ca!