Разработка шоу пользователя
-
20-12-2019 - |
Вопрос
Несмотря на все вопросы и решения, которые я прочитал до сих пор, мне пока ничего не помогло, показываю страницу профиля пользователя, вошедшего в систему, с помощью 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
чтобы отображать только профиль пользователя, вошедшего в систему, я бы добавил действие контроллера (например, называемое профилем), а затем установил/получил переменную сеанса с идентификатором пользователя и перенаправил его в представление пользователя.