【发布时间】:2020-06-05 08:46:31
【问题描述】:
我有一个带有controller.class == Admin::TeamsController 的controller 对象。我可能也有类似controller.class == Admin::UsersController 的情况。现在我想检查一下这是不是真的:
controller.class.to_s.match?('Admin::')
也就是说,我想知道:这个对象是在Admin 模块命名空间中定义的类的吗?说清楚,结构是这样的吗?
module Admin
module SomeOtherModulePerhaps
class TeamsController
end
end
end
我的问题:有没有更好的 Ruby 方法来测试这个?将类转换为字符串,然后像这样进行正则表达式匹配,感觉有点 hacky。
编辑:
对于我受限的用例,我可以这样检查:
controller.class.to_s.split('::').first == 'Admin'
但这并不能完全解决其他人可能遇到的一般情况。例如,可能有像XyzAdmin::TeamsController 这样的情况,有人可能想要排除,但我的第一个解决方案会失败,或者Foo::Admin::TeamsController,有人可能想要包含,但我的第二个解决方案会失败。
我想找到更好的方法。
【问题讨论】:
标签: ruby-on-rails ruby class module controller