私はいくつかのカスタム レーキ ルートを持っており、自分のアカウントの現在のユーザー編集ページのみを許可する目的で CanCan を使用しようとしています。私のURLの例は - >url.com/users/4/service/edit
アクションを持つユーザーコントローラーがあります:
def services
@user = User.find(params[:id])
@servicable = @user
@services = @servicable.services
@service = Service.new
authorize!(:services, @user || User)
end
問題は、編集ページに入るたびにインデックス ページにリダイレクトされることです。自分のサービスを編集しようとしても。
私のユーザー ID が4
で、 にアクセスするurl.com/users/4/services/edit
と、インデックス ページに再ルーティングされたとします。他のユーザーIDを使用しようとすると、これもリンゴになります-> url.com/users/3/services/edit
、、、users/2/services/edit
などusers/63/services/edit
...
自分の編集ページにアクセスできるようにしたいのですが、他のページにはアクセスしたくありません。
私のルートは次のようなものです:
resources :users do
resources :services, :defaults => { :servicable => 'user' }
end
編集:これは私の能力です
def initialize(user)
user ||= User.new #guest user
if user.role? :admin
can :manage, :all
can :manage, User
elsif user.role? :business
can [:show, :update], User, :id => user.id
elsif user.role? :resident
can [:show, :update], User, :id => user.id
else
can [:show, :update], User, :id => user.id
end
編集#2:
これはservices_controllerからのものです
def edit
@service = @servicable.services.find(params[:id])
end
上からのルートは無視してください。私が使用している正しいルートは次のとおりです。
resources :users do
member do
get 'services', :path => 'services/edit', :defaults => { :servicable => 'user' }
end
end