在一个应用程序中,我有一个方法,它获取某个ActiveRecord的策略名称,如下所示:
def policy_for(record:)
"#{record.class}Policy".constantize.new(record)
end
这是完美的工作,除了在一个例子中,我有一个模型和一个策略具有相同的名称。此行然后返回模型,而不是策略。
换句话说,问题:多个类具有相同的名称。
目标:需要一个constantize替代方法,该方法获取位于特定目录中的类,或者具有特定超类,例如(BasePolicy而不是ActiveRecord)。
如何在Ruby中执行此操作?
1条答案
按热度按时间nhn9ugyo1#
1 -在同一模块下不要有名称相似的类。
2 -在Rails中,模型将是最外层的上下文。因此考虑将您的策略移到
Policies
命名空间下。这将解决您的问题,并在将来解决类似的其他问题。