Question

Je réutilise actuellement un partiel sur deux vues différentes.

  

Voir A

     

Voir B

Le partiel appartient au modèle A mais est associé au modèle B, il est donc également applicable au modèle B.

Il contient un formulaire et, lorsque les données sont soumises, il redirige toujours l'utilisateur vers la vue A. Toutefois, lorsque je soumets le formulaire à partir de la vue B, je souhaite être redirigé vers la vue B au lieu du formulaire A.

La raison pour laquelle il redirige actuellement vers la vue A est qu’il s’agit du modèle auquel ce formulaire appartient. Ainsi, une fois posté, il parle au contrôleur A et utilise une redirection qui conduit l'utilisateur à a_url.

Comment puis-je indiquer à mon formulaire (ou à plus d'une action du contrôleur) de rediriger l'utilisateur vers son lieu d'origine?

Merci!

Était-ce utile?

La solution

Résolu.

J'ai ajouté à mon formulaire un champ masqué contenant le nom du contrôleur indiquant l'endroit où le partiel a été rendu, puis mon bloc respond_to a déterminé où envoyer l'utilisateur.

Code de vue:

<%= hidden_field_tag 'submitted_from', "#{controller.controller_name}" %>

Mon code de contrôleur:

if params[:submitted_from] == 'A'
  redirect_to a_url
else
  redirect_to b_url
end

Autres conseils

Au lieu d'utiliser une balise masquée, vous pouvez placer cette information dans la session:

session[:submitted_from] = new_model_url

et dans l'autre action ..

redirect_to(session[:submitted_from])
session[:submitted_from] = nil

Il est assez facile de changer les variables de formulaire, alors qu'il peut être plus difficile (mais pas impossible) de forger une session. Je choisirais cette voie si c’était ma candidature.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top