0

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
4

1 に答える 1

1

私はそれを考え出した; find_by: :slug を load_and_authorize_resource に追加すると、まさに私が探していたことが実現しました。

load_and_authorize_resource only: [:dashBoard], find_by: :slug
于 2015-02-18T20:32:29.453 に答える