Из вашего вопроса непонятно, куда вы помещаете класс Scope, но он должен находиться внутри вашего класса EmployeePolicy. Вы передадите параметр так же, как и любой другой класс.
Я думаю, что вы получаете эту ошибку, потому что вы непреднамеренно конвертируете свою область ActiveRecord в массив, используя метод #select
. Попробуйте вместо этого использовать методы ActiveRecord.
# app/policies/employee_policy.rb
class EmployeePolicy < ApplicationPolicy
class Scope
attr_reader :user, :scope, :restaurant
def initialize(user, scope, restaurant)
@user = user
@scope = scope
@restaurant = restaurant
end
def resolve
if is_user_manager_or_gerant_or_admin?
scope.where(restaurant: restaurant).where.not(employee.actif: nil)
end
end
...
end
end
Ваш метод индекса должен выглядеть следующим образом:
# app/controllers/employees_controller.rb
class EmployeesController < ApplicationController
def index
@restaurant = Restaurant.find(params[:restaurant_id])
@employees = EmployeePolicy::Scope.new(current_user, Employee, @restaurant).resolve
end
end
Если у вас все еще проблемы, то этот пост может быть поучительным.