2010-05-04 15 views
5

Me gustaría crear una ruta de carriles para editar el perfil de un usuario.Ruta de carriles dependiente del usuario actual

En lugar de tener que usar/usuarios /: id/editar, me gustaría tener una URL como/edit_profile

¿Es posible crear una ruta dinámica que gira/edit_profile en/usuarios/{usuario de id}/edit, o debería hacer algo en un controlador o?

+0

Creo que es un trabajo de ruta/controlador nombrado. –

+0

¿es posible que elabores un poco sobre lo que quieres decir con esto? ¡Gracias! – Lowgain

Respuesta

4

Es posible que desee crear un controlador separado para esta tarea, pero se podía col por lo siguen usando users_controller y simplemente comprobar si hay un conjunto params[:id]:

def edit 
    if params[:id] 
    @user = User.find(params[:id]) 
    else 
    @user = current_user 
    end 
end 

Pero debe tener en cuenta que /users rutas normalmente a la acción y no indexshow si todavía tienen la ruta map.resources :users. Pero se puede establecer una llamada diferente singular ruta para que:

map.resources :users 
map.resource :profile, :controller => "users" 

De esta manera /users habría una lista de todos los usuarios, /users/:id mostraría cualquier usuario y /profile mostraría la show haya iniciado la sesión en la página usuarios. Para editar su propio perfil, debería llamar a '/ profile/edit'.

+0

gracias! Utilicé una estructura de URL diferente, pero pude utilizar su respuesta para lograr lo que quería. – Lowgain

3

Dado que una ruta y un controlador tienen dos propósitos diferentes, necesitará ambos.

Para el controlador, suponiendo que se está almacenando el identificador de usuario en una sesión, usted podría tener su método de edición hacer algo como:

def edit 
    @user = User.find(session[:user_id]) 
end 

Entonces tiene una ruta que se ve algo como:

map.edit_profile "edit_profile", :controller => "users", :action => "edit" 

esta ruta le daría una ruta denominada llamada edit_profile_path

0

respuesta de Tomás Markauskas podría funcionar, pero aquí está la respuesta a su pregunta de los carriles de guía:

get 'edit_profile', to: 'users#edit' 

Así, cuando alguien va a www.yoursite.com/edit_profile, será el camino a www.yoursite .com/users/edit.

Luego, en su controlador puede acceder el usuario con

@user = User.find(session[:current_user_id]) 

Suponiendo que se establece variable de sesión cuando alguien abre una sesión. Además, no se olvide de comprobar si está conectado. Esto se funciona si usas Resourceful Routing (el valor predeterminado de Rails) o no.

Fuente: http://guides.rubyonrails.org/routing.html

0

hacen la ruta como

get '/users/:id/edit', to: 'users#edit', as: 'edit_profile' 

Como se explica en esta sección enlace 'El camino difícil':

http://augustl.com/blog/2009/styling_rails_urls/

La url será

/users/edit_profile 

Como la ID ya no está en la URL, tenemos que cambiar el código un poco.

class User < ActiveRecord::Base 
    before_create :create_slug 

    def to_param 
    slug 
    end 

    def create_slug 
    self.slug = self.title.parameterize 
    end 
end 

Cuando se crea un usuario, la versión para el URL del título se almacena en la base de datos, en la columna de la babosa.

Para una mejor comprensión, lea el siguiente enlace

http://blog.teamtreehouse.com/creating-vanity-urls-in-rails

0

escritura en cualquier controladora de casa.

set_roots def

if current_user  
    redirect_to dashboard_home_index_path 
else  
    redirect_to home_index_path 
end  

final

en el archivo routes.rb

raíz: a =>

partido 'casa # set_roots' "/ buscar_raices" => "hogar #set_roots "

Cuestiones relacionadas