2010-12-14 2 views
5

je ne trouve pas beaucoup d'information sur la façon de le faire même si il y a beaucoup de suggestions sur la façon de passer params à une redirection en utilisant hashs comme celui-ci redirect_torails 3 redirect_to passent params une route nommée

:action => 'something', :controller => 'something' 

dans mon application, j'ai le fichier suivant dans les routes

match 'profile' => 'User#show' 

mes loos d'action spectacle comme celui-

def show 
@user = User.find(params[:user]) 
    @title = @user.first_name 
end 

la redirection se produit dans le même contrôleur utilisateur comme celui-ci

def register 
    @title = "Registration" 
    @user = User.new(params[:user]) 

    if @user.save 
     redirect_to '/profile' 
    end 
    end 

La question est dans l'action de registre quand je redirect_to comment puis-je transmettre les params afin que je puisse saisir l'utilisateur de la base de données ou mieux encore ... J'ai déjà une variable utilisateur alors comment transmettre l'objet utilisateur à l'action show?

-Matthieu

Répondre

7

Si vous faites une redirection, Rails envoyer en fait une réponse 302 Moved avec une URL dans le navigateur et le navigateur envoie une autre demande à cette URL. Donc vous ne pouvez pas "passer l'objet utilisateur" comme dans Ruby, vous ne pouvez passer que quelques paramètres encodés en url.

Dans ce cas, vous voudrez probablement changer votre définition de routage:

match 'profile/:id' => 'User#show' 

puis rediriger comme ceci:

redirect_to "/profile/#{@user.id}" 
+0

qui a fonctionné parfaitement! Merci beaucoup pour l'aide – mattwallace

2

Tout d'abord, je le nom de votre itinéraire, faire utiliser plus facile:

match '/profile/:id' => 'users#show', :as => :profile 

alors vous rediriger vers lui, comme ça:

redirect_to profile_path(@user) # might have to use profile_path(:id => @user.id) 

ensuite pour tirer l'utilisateur de la base de données:

def show 
    @user = User.find(params[:id]) # :id comes from the route '/profile/:id' 
    ... 
end 

En aparté, si vous utilisez quelque chose comme Concevoir pour l'authentification, il vous fournit une méthode current_user, et donc vous n'aurez pas besoin passer autour de l'ID de l'utilisateur:

match '/profile' => 'users#show', :as => :profile 

redirect_to profile_path 

def show 
    @user = current_user 
end