【问题标题】:rails4 how to list all models with an existing Pundit policyrails4 如何列出具有现有 Pundit 策略的所有模型
【发布时间】:2015-10-13 16:34:36
【问题描述】:

我正在尝试使用已定义的 Pundit 策略获取我的应用中所有模型的列表。

在那之前,我正在使用此代码进行检查:

current_user = User.first
ActiveRecord::Base.send(:subclasses).map { |subclass| subclass.name if    
    Pundit.policy(current_user, subclass.new) }

但是当我使用 Globalize gem 时,在收集时出现以下错误,作为抽象类,它无法实例化

NotImplementedError: Globalize::ActiveRecord::Translation is an
  abstract class and cannot be instantiated.

有没有办法覆盖这个错误?在实例化子类之前在 if 测试中插入一些检查 我也可以从子类列表中删除这个 Globalize 表

["HABTM_Groups", "HABTM_Roles", "HABTM_Groups", "HABTM_Roles", "User", "HABTM_Groups", "HABTM_Roles", "AccessLevel", "Company", "Document", "Group", "Globalize::ActiveRecord::Translation", "HABTM_Users", "Message", "Profile", "RestrictedActivity", "RestrictedAttribute", "Role", "HABTM_Users", "Sheet"]

感谢反馈

【问题讨论】:

    标签: ruby-on-rails-4 pundit


    【解决方案1】:

    我发现了如何避免抽象类...

    ActiveRecord::Base.send(:subclasses).map { |subclass| subclass.name if !subclass.abstract_class? && Pundit.policy(current_user, subclass.new) }.compact
    

    也许有一种更简单的方法可以使用我尚未发现的一些内部权威技巧来获取此列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多