Rails : rendre et quitter immédiatement
À l'aide de la omniauth gem, je suis obligé de définir un itinéraire unique de rappel pour réussir à bien des identifiants de connexion, quel que soit le fournisseur de :
def auth_callback
auth_data = request.env['omniauth.auth']
if auth_data.has_key('something')
process_one(auth_data)
else
process_two(auth_data)
end
# No view is available here
end
def process_one
# do something then render view for process_one
return
end
def process_two
# do something then render view for process_two
return
end
Comment puis-je empêcher le contrôleur de retourner à la auth_callback méthode et de l'essayer pour afficher la vue correspondante (qui n'existe pas) ? Le traitement doit être considérée comme terminée une fois que l'process_one ou process_two méthodes sont de retour.
- Avez-vous les chemins de code dans vos méthodes
process_one
etprocess_two
qui ne renvoie rien? Si oui, vous pouvez essayer de rendre :rien=>vrai ou quelque chose d'autre là-bas - Je pourrais utiliser "si(x) rendu :process_one d'autre de rendu :process_two" dans auth_callback, mais c'est tout à fait anormal : je préfère compter sur process_one et process_two à rendre leurs propres points de vue.
- Je voulait dire que si vous écrivez quelque part plaine
return
(ou code commereturn if(!something)
). Rails de pourrait essayer de rendre l'action par défaut de la vue - Problème similaire: stackoverflow.com/questions/5743534/redirect-to-return/...
Vous devez vous connecter pour publier un commentaire.
Pourquoi pas spécifiquement
render
dans ces méthodes?Rails doit détecter que vous avez déjà et de ne pas essayer de rendre à nouveau.
return
nécessaire dans ce cas? En d'autres termes, est-ce correct si la méthode ne retourne pas de néant, mais au lieu de cela quelle que soitrender
retourne?return
ici -- uniquement si vous disposez d'une logique que vous voulez passer après l'appel à rendre.&&
au lieu deand
Si vous souhaitez revenir à la chaîne de méthodes, par exemple,
va provoquer
AbstractController::DoubleRenderError
, ce qui signifie que vous appelezrender
deux fois.Vous pouvez lire ce l'article à savoir 4 façons de gérer ce genre de situation.