2010-12-14 7 views
5

yo no estoy encontrando mucha información sobre cómo hacer esto a pesar de que hay un montón de sugerencias sobre cómo pasar parametros a una redirección utilizando hashs como esto redirect_tocarriles 3 redirect_to pasan params a una ruta denominada

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

en mi aplicación tengo el siguiente en las rutas presentar

match 'profile' => 'User#show' 

mis aseos programa de acción como esta

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

la redirección sucede en el mismo controlador de usuario como esto

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

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

La pregunta está en la acción de registro cuando redirect_to cómo puedo pasar a lo largo de los parametros para que pueda agarrar ese usuario de la base de datos o mejor aún ... Ya tengo una variable de usuario, ¿cómo paso el objeto del usuario a la acción de mostrar?

Mateo

Respuesta

7

Si estás haciendo una redirección, Rails realidad enviar una respuesta 302 Moved con una URL para el navegador y el navegador enviará otra petición a la URL. Entonces no puedes "pasar el objeto del usuario" como en Ruby, solo puedes pasar algunos parámetros codificados en la url.

En este caso, es probable que desee cambiar su definición de enrutamiento para:

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

y luego redirigir la siguiente manera:

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

que funcionó perfecto! Muchísimas gracias por la ayuda – mattwallace

2

En primer lugar, me gustaría nombrar a su ruta, para hacer utilizando más fácil:

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

a continuación, sería redirigir a la misma, así:

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

luego llevar al usuario de la base de datos:

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

Como acotación al margen, si se utiliza algo así como Diseñar para la autenticación, que le provee de un método current_user, y por lo tanto usted no necesita pase alrededor de la identificación del usuario:

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

redirect_to profile_path 

def show 
    @user = current_user 
end 
Cuestiones relacionadas