Я прочитал несколько вопросов по этой же теме, но никто из них не решает мои сомнения или работает для меня.Pundit не может найти политики, основанные на именах
Pundit не может найти политики с именами в моем коде, но я не могу понять, почему. У меня есть «бэкенд» пространство имен, и в любое время, что items_controller.rb в этом «бэкэндом» называется, она использует приложение/политики/item_policy.rb вместо приложения/политики /backend/item_policit.rb один.
Любая помощь будет очень благодарна пожалуйста. Я много времени занимался этим вопросом.
Мои приложение/политика/ каталог:
application_policy.rb
backend_policy.rb
item_policy.rb
backend/item_policy.rb
application_policy.rb
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user, record.class)
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope
end
end
end
backend_policy.rb
class Backend::ApplicationPolicy < ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user, record.class)
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope
end
end
end
бэкенд/item_policy.rb
class Backend::ItemPolicy < Backend::ApplicationPolicy
attr_reader :user, :item
def initialize(user, item)
@user = user
@item = item
end
def index?
raise Pundit::NotAuthorizedError, "must be logged in" unless @user.admin?
end
end
контроллеры/бэкенд/items_controller.rb
class Backend::ItemsController < Backend::ApplicationController
before_action :set_item, only: [:show, :edit, :update, :destroy]
after_action :verify_authorized
# GET /backend/items
# GET /backend/items.json
def index
@search = Item.search (search_params)
@items = @search.result().page(params[:page]).per(12)
authorize Item
end
....
end