今天向您提出一个 Rails/Design 问题。我正在处理网站的用户个人资料,但遇到了此错误
ActiveRecord::RecordNotFound 位于/users/show
找不到“id”=show 的用户
不确定究竟发生了什么,因为我以前从未真正遇到过类似的事情。以下是一些需要查看的必要文件 -
users_controller.rb:
class UsersController < ApplicationController
before_action :authenticate_user!, except: [:show]
def show
@user = User.find(params[:id])
@user_bookmarks = @user.bookmarks
@liked_bookmarks = @user.likes
end
def update
if current_user.update_attributes(user_params)
flash[:notice] = "User information updated"
redirect_to edit_user_registration_path
else
flash[:error] = "Invalid user information"
redirect_to edit_user_registration_path
end
end
private
def user_params
params.require(:user).permit(:name, :avatar)
end
end
routes.rb:
Rails.application.routes.draw do
devise_for :users
resources :users, only: [:show, :update]
post :incoming, to: 'incoming#create'
resources :topics do
resources :bookmarks, except: [:index]
end
resources :bookmarks, except: [:index] do
resources :likes, only: [:create, :destroy]
end
get 'about' => 'welcome#about'
root to: 'welcome#index'
end
user.rb:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
mount_uploader :avatar, AvatarUploader
has_many :topics, dependent: :destroy
has_many :bookmarks, dependent: :destroy
has_many :likes, dependent: :destroy
validates :name, presence: true
def admin?
role == 'admin'
end
def moderator?
role == 'moderator'
end
def member?
role == 'member'
end
def liked(bookmark)
likes.where(bookmark_id: bookmark.id).first
end
end
最佳答案
show
操作取决于查找 id
。由于您访问的是 URL /users/show
,因此它假定您正在尝试查找 id
为 show
的用户。相反,您应该访问 /users/1
这样的网址来触发 show
操作。
The Rails guide on routing有一个部分指定 GET/photos/:id
映射到 photos#show
。
关于ruby-on-rails - 找不到 'id' =show 的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858104/