ruby on rails - rails - Creando una página de muestra `Usuarios` usando Devise
rspec rails devise (4)
Intento crear una página de show
usuario (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 hacer uno o tengo que anularlos?
Debe generar un users_controller
que herede de application_controller
y defina allí su método de show
personalizado. 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]
No olvide que las rutas de los usuarios deben estar por debajo de las rutas de los usuarios, de esta manera:
#routes.rb
devise_for :users
resources :users, :only => [:show]
Además, si está utilizando un nombre de usuario o un correo electrónico como clave principal en lugar de la identificación habitual, debe evitar conflictos de enrutamiento declarando sus rutas de la siguiente manera:
#routes.rb
devise_for :users, :path_prefix => ''d''
resources :users, :only => [:show]
mostrando los perfiles current_user / other_user con idear:
Después de instalar el dispositivo
Crear un controlador de usuarios:
rails generate controller Users
A continuación, crea una acción de mostrar y busca el usuario con id de params:
def show
@user = User.find(params[:id])
end
Cree un archivo show.html.erb en la carpeta de la vista del usuario:
<%= @user.email %>
Vinculación a la página de visualización de usuarios:
<%= link_to "current_user_show", current_user %>
Ahora, si desea ver otros perfiles, cree una acción de índice en el controlador de usuarios:
def index @users = User.all end
Cree un index.html.erb en la carpeta de la vista del Usuario y luego:
<% @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 lo vinculará con el archivo index.html.erb de los usuarios; allí creará un bucle y un enlace al perfil de los usuarios:
<% @users.each do |user| %>
<%= link_to user.username, user %>
<%= user.email %>
<% end %>
¡Esto debería funcionar!
puede generar las vistas utilizadas por idear, por lo que puede cambiarlo como desee.
rails g devise:views