我正在尝试在我的 Rails 应用程序中使用 Vanity URL,以便显示用户名而不是 ID。我创建了 slug,以便在 url 中使用用户名而不是 id(这里一切正常),当我尝试加载在控制器中启用了 load_and_authorize_resource 的页面时,就会出现我面临的问题。我相信这是试图通过 id 而不是导致错误“找不到 id=X 的用户”的 slug 来查找用户。有没有什么地方我可以覆盖 load_and_authorize_resource 以便它使用 slug 而不是 ID?
class User < ActiveRecord::Base
def to_param
slug
end
end
class UsersController < ApplicationController
load_and_authorize_resource only: [:dashBoard]
def dashboard
end
def show
#this is the user's profile page, because I don't have a load
#and authorize resource check on it, it loads without error
#when the vanity url is enabled
@user = User.find_by_slug(params[:id])
end
end
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.memberships.count > 0
can :manage, User
else
can :read, :all
end
end
end