Concevoir afficher l'utilisateur
-
20-12-2019 - |
Question
Malgré toutes les questions et solutions que j'ai lues jusqu'à présent, rien n'a encore fonctionné pour moi, affichant une page de profil d'utilisateur connecté avec Devise.J'ai également essayé un certain nombre de choses dans mes itinéraires.Mon erreur s'affiche actuellement : "Impossible de trouver l'utilisateur sans identifiant".Je suis un débutant avec Devise, donc même si je l'aime bien, cela a été un peu frustrant.Toute aide serait appréciée.Encore en phase d’apprentissage.Merci.
class UsersController < ApplicationController
before_filter :authenticate_user!, :except => [:show]
after_action :verify_authorized
def index
@users = User.all
authorize User
end
def show
@user = User.find(params[:id])
authorize @user
end
Itinéraires
Rails.application.routes.draw do
devise_for :users
devise_scope :user do
get 'users/sign_in' => 'devise/sessions#new'
get 'users/sign_out' => 'devise/sessions#destroy'
end
resources :user
match 'users/show', to: 'users#show', via: 'get'
root to: 'pages#home'
end
La solution
match 'users/show', to: 'users#show', via: 'get'
Cette ligne suggère qu'elle acheminera l'url users/show
à votre contrôleur#action users#show
.Et à l'intérieur de votre contrôleur, vous recherchez l'utilisateur avec l'identifiant de params[:id]
.Sauf que vous ne transmettez jamais de paramètre id.Généralement, l'identifiant est transmis dans l'URL (c'est-à-dire users/show/:id
).C'est la cause de votre erreur.
La solution dépend de ce que vous essayez d'accomplir.Vous pouvez soit transmettre l'identifiant via l'URL, soit si vous souhaitez que l'identifiant soit transmis via l'URL. users/show
pour afficher uniquement le profil utilisateur connecté, j'ajouterais une action de contrôleur (appelée profil par exemple), puis je définirais/obtiendrais une variable de session avec l'ID utilisateur et je redirigerais vers la vue de l'utilisateur.