Использование областей в моей политике Pundit (Rails 5) - PullRequest
0 голосов
/ 09 сентября 2018

Как использовать области, определенные в модели, в моей политике Pundit?

В моей модели у меня есть область действия:

scope :published, ->{ where.not(published_at: nil )}

И в моей политике Pundit у меня есть

class CompanyPolicy < ApplicationPolicy
    def index?
        true
    end
    def create?
        user.present?
    end
    def new?
        true
    end
    def show?
        true
    end
    def update?
      user.present? && user == record.user
    end
end

Как я могу использовать мой прицел в политике Pundit? Я хотел бы показать это только в том случае, если оно «опубликовано», что-то вроде этого, которое на данный момент не работает:

class CompanyPolicy < ApplicationPolicy
    def show
       record.published?
    end
end

1 Ответ

0 голосов
/ 09 сентября 2018

Области являются методами класса, их нельзя вызывать в экземплярах.

Вы также должны определить published? метод экземпляра:

def published?
  published_at.present?
end

Вы можете использовать область, если спросите, существует ли запись в данной области с:

User.published.exists?(user.id)

И он вернет true, если область действия включает в себя идентификатор пользователя, но я бы не рекомендовал этого, он требует дополнительного запроса к базе данных, чтобы получить что-то, что вы можете узнать из уже имеющегося у вас экземпляра пользователя.

...