web-dev-qa-db-fra.com

Création d'une page de présentation des utilisateurs à l'aide de Devise

J'essaie de créer une page utilisateur show (qui fonctionnera comme une page de profil) mais je ne sais pas comment faire cela avec Devise. Il ne semble pas que Devise soit livré avec une sorte de définition show - est-il possible d'accéder aux contrôleurs que Devise implémente pour en créer un ou dois-je les remplacer?

43
steffi2392

Vous devez générer un users_controller qui hérite de application_controller et définissez-y votre méthode show personnalisée. N'oubliez pas de lui créer une vue et des itinéraires. 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]
71
Sergey Kishenin

N'oubliez pas que les itinéraires de vos utilisateurs doivent être inférieurs aux itinéraires des utilisateurs de devise_for, comme ceci:

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

De plus, si vous utilisez un nom d'utilisateur ou un e-mail comme clé primaire au lieu de l'ID habituel, vous devez éviter les conflits de routage en déclarant vos itinéraires comme suit:

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

montrant les profils current_user/other_user avec devise:

Après l'installation de devise

Créez un contrôleur d'utilisateurs:

Rails generate controller Users

Ensuite, créez une action show et trouvez l'utilisateur avec l'identifiant params:

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

Créez un fichier show.html.erb dans le dossier de vue utilisateur:

<%= @user.email %>

Lien vers la page d'affichage des utilisateurs:

<%= link_to "current_user_show", current_user %>

Maintenant, si vous souhaitez afficher d'autres profils, créez une action d'index dans le contrôleur des utilisateurs:

def index @users = User.all end

Créez un index.html.erb dans le dossier Vue utilisateur puis:

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

Le lien pour cela sera:

<%= link_to "show_index_of_users", users_path %>

Cela vous liera au fichier des utilisateurs index.html.erb, vous créerez une boucle et un lien vers le profil des utilisateurs:

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

Cela devrait fonctionner!

16
Manny Quintanilla