2015-05-21 1 views
0

Вот моя проблема. У меня есть несколько пользователей с несколькими подписками каждый, и я хочу авторизовать метод индекса подписки с Pundit. Мой routes.rb:Cant разрешает вложенные ресурсы с помощью Pundit

resources :users do 
    resources : subscriptions 
end

Давайте предположим, что я пользователь с идентификатором . Что мне нужно, чтобы получить список подписок, когда я открываю /users/1/subscriptions и ошибки доступа Pundit, когда я открываю /user/2/subscriptions

Вот мой subscriptions_controller.rb

SubscriptionController < ApplicationController 
    def index 
     @user = User.find(params[:user_id]) 
     @subscriptions = @user.subscriptions 

     authorize @subscriptions 
    end 
end

я могу сделать authorize @user, :subscriptions_index, но он просто чувствует себя неправильно писать правила пользователя для аутентификации подписки. Как мне подойти к этой проблеме? Заранее спасибо.

ответ

0

Это должно работать для вас (не может быть наиболее эффективным):

class SubscriptionController < ApplicationController 
    def index 
    @user = User.find(params[:user_id]) 
    # this should either return the same or an empty association 
    @subscriptions = @user.subscriptions 
    authorize @subscriptions 
    end 
end 

class SubscriptionPolicy < ApplicationPolicy 
    def index? 
    # asking if all subscriptions have the current_user id as the user_id 
    record.all? {|sub| sub.user_id == user.id }   
    end 
end 
+0

Спасибо за предложение, но, как вы отметили, что это не самый эффективный – kabukiman

+0

Если вы ищете наиболее эффективным, то вы должны изменить ваш вопрос просить об этом. – nikkon226

+0

@ nikkon226 Что делать, если у пользователя нет подписки? Разве эта политика не позволяет вам пройти путь в этом случае? –

 Смежные вопросы

  • Нет связанных вопросов^_^