Вопрос

Несмотря на все вопросы и решения, которые я прочитал до сих пор, мне пока ничего не помогло, показываю страницу профиля пользователя, вошедшего в систему, с помощью devise.Я тоже пробовал несколько вещей на своих маршрутах.Моя ошибка в настоящее время показывает: «Не удалось найти пользователя без идентификатора».Я новичок в разработке, поэтому, хотя мне это нравится, это немного расстраивает.Любая помощь будет оценена по достоинству.Все еще на стадии обучения.Спасибо.

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

Маршруты

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
Это было полезно?

Решение

match 'users/show', to: 'users#show', via: 'get'

Эта строка предполагает, что она будет маршрутизировать URL-адрес users/show вашему контроллеру#действие users#show.И внутри вашего контроллера вы ищете пользователя с идентификатором params[:id].За исключением того, что вы никогда не передаете параметр id.Обычно идентификатор передается в URL-адресе (т. е. users/show/:id).Вот в чем причина вашей ошибки.

Решение зависит от того, чего вы пытаетесь достичь.Вы можете передать идентификатор через URL-адрес или, если хотите, users/show чтобы отображать только профиль пользователя, вошедшего в систему, я бы добавил действие контроллера (например, называемое профилем), а затем установил/получил переменную сеанса с идентификатором пользователя и перенаправил его в представление пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top