Rails - passage de paramètres dans un redirect_to - session est le seul moyen?
J'ai un contrôleur de jeu comme la racine de mon application. Qu'il accepte un paramètre appelé uid et vérifie si l'utilisateur existe. Si non, je le veux pour rediriger vers la page nouvel utilisateur et de pré-remplir le champ uid avec l'uid dans le paramètre.
Dans mon root_controller:
def index
if params[:uid]
@user = User.find_by_uid(params[:uid])
if (!@user.blank?)
# do some stuff
else
session[:user_id] = params[:uid]
redirect_to(new_user_path, :notice => 'Please register as a new user')
end
else
# error handling
end
end
Dans mon users_controller, GET /users/nouvelle action:
def new
@user = User.new
@user.uid = session[:user_id]
# standard respond_to stuff here
end
Tout cela fonctionne très bien, mais est-ce une façon acceptable pour ce faire? J'ai d'abord essayé de passage du uide dans le rediriger déclaration, comme:
redirect_to(new_user_path, :notice => 'Please register as a new user', :uid => params[:uid])
ou même de le tester avec:
redirect_to(new_user_path, :notice => 'Please register as a new user', :uid => 'ABCD')
mais ni semblait passer la valeur à users_controller...je ne pouvais pas accéder à l'aide params[:uid] à partir de ce contrôleur.
Session est un bon endroit pour stocker des trucs comme ça, ou est-il une meilleure façon de passer via la redirection? Merci!
Vous devez vous connecter pour publier un commentaire.
Une session est très bien pour stocker ce genre d'information. En fonction de ce que vous faites avec le
uid
il pourrait être dangereux pour lui permettre d'être lu à partir de l'URL. Imaginez si l'utilisateur final a été méchant et commencé à mettre d'autres utilisateurs de l'IDs dans il.Pour les messages qui ne devrait durer que jusqu'à la prochaine demande de Rails en fait a la
flash
objet qui va l'emporter sur pour vous.http://guides.rubyonrails.org/action_controller_overview.html#the-flash
Cela dit, si vous voulez rediriger vers une url et passer quelques params, faire comme ceci:
Les paramètres que vous souhaitez passer des arguments à la
new_user_path
méthode, pas laredirect_to
méthode.