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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top