ID の代わりにユーザー名が表示されるように、Rails アプリでバニティ URL を使用しようとしています。ユーザー名がIDの代わりにURLで使用されるようにスラッグを作成しました(ここではすべて正常に機能します)。コントローラーでload_and_authorize_resourceが有効になっているページをロードしようとすると、直面している問題が発生します。これは、「ID = X のユーザーが見つかりませんでした」というエラーを引き起こしているスラッグではなく、ID を介してユーザーを見つけようとしていると思います。ID ではなくスラッグを使用するように load_and_authorize_resource をオーバーライドできる場所はありますか?
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