rails4如何列出具有现有Pundit策略的所有模型

时间:2015-10-13 16:34:36

标签: ruby-on-rails-4 pundit

我正在尝试使用已定义的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"]

感谢您的反馈

1 个答案:

答案 0 :(得分:0)

我找到了如何避免摘要类......

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

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