2011-08-17 6 views
39

Estoy tratando de crear una página de Usuario show (que funcionará como una página de perfil) pero estoy confundido acerca de cómo hacer esto con Devise. No parece que Devise tenga algún tipo de definición de show, ¿hay alguna forma de que pueda acceder a los controladores que Devise está implementando para poder crear uno o debo anularlos?Creando una página de muestra `Users` utilizando Devise

Respuesta

62

Debe generar una users_controller que hereda de application_controller y definir allí su método personalizado show. No te olvides de crear una vista y rutas para ello. Ex:

#users_controller.rb 
def show 
    @user = User.find(params[:id]) 
end 

#in your view 
<%= @user.name %> 

#routes.rb 
match 'users/:id' => 'users#show', via: :get 
# or 
get 'users/:id' => 'users#show' 
# or 
resources :users, only: [:show] 
+0

Así que he hecho todo eso, acabo de cambiar 'show' por' index', lo que hizo que '@users = Users.all' pero obtengo este error: constante no inicializada UsersController :: Users. Encontré mi error, debería ser '@users = @ User.all' – tcatchy

+0

Una vez que hago esto, ¿cómo puedo vincularme a un perfil de usuarios específico y tenerlo abierto/accesible sin haber iniciado sesión? ¡Gracias! – westman2222

+0

El código de arriba hará que el usuario muestre (perfil) página accesible sin iniciar sesión –

-11

puede generar las vistas utilizadas por el dispositivo, por lo que puede cambiarlo como desee.

rails g devise:views 
+4

pero todavía no hay una página de presentación para los usuarios. solo páginas nuevas y de edición. –

+1

mala respuesta, lea primero la pregunta, parece que no ha funcionado con el dispositivo antes de – SsouLlesS

+0

'rails g idear: views' genera las vistas para new y edit. No mostrar página Pruebe el código y vea sus rutas, no hay espectáculo. –

32

No olvide que las rutas de los usuarios deben estar por debajo de las rutas usuarios devise_for, así:

#routes.rb 
devise_for :users 
resources :users, :only => [:show] 

Además, si está utilizando un nombre de usuario o un correo electrónico como la principal clave en lugar del ID de costumbre, se debe evitar conflictos de enrutamiento al declarar sus rutas de la siguiente manera:

#routes.rb 
devise_for :users, :path_prefix => 'd' 
resources :users, :only => [:show] 
8

que muestran CURRENT_USER/otro_usuario perfiles con legado:

After installing devise

Crear un controlador de usuarios:

rails generate controller Users 

continuación, crear una acción show y encontrar el usuario con id params:

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

Crear un archivo show.html.erb en el usuario Ver carpeta:

<%= @user.email %> 

Enlazando con los usuarios Mostrar la página:

<%= link_to "current_user_show", current_user %> 

Ahora bien, si desea ver otros perfiles de crear una acción de índice en el controlador de los usuarios:

def index @users = User.all end 

Crear index.html.erb en la carpeta de vista del usuario a continuación:

<% @users.each do |user| %> 
<%= link_to user.username, user %> 
<%= user.email %> 
<% end %> 

El enlace para esto será:

<%= link_to "show_index_of_users", users_path %> 

Esto le vinculará al archivo de los usuarios index.html.erb no va a crear un lazo y un enlace a los usuarios de perfil:

<% @users.each do |user| %> 
<%= link_to user.username, user %> 
<%= user.email %> 
<% end %> 

Esto debería funcionar!

+0

No hay necesidad de configurar/rutas? –

Cuestiones relacionadas