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?
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]
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]
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!