我正在编写一个 Rails 插件,并且需要能够动态确定控制器与哪个模型相关联。例如,如果我有一个 PeopleController,我需要一种干净的方式来确定控制器是否处理 Person 模型。
我查看了 API 并没有找到它的方法。
作为正则表达式与一些ActiveSupport
变形技巧相结合的唯一方法是singularize
?
如果是这样,这种方法有什么陷阱吗?什么是边缘情况?
我正在编写一个 Rails 插件,并且需要能够动态确定控制器与哪个模型相关联。例如,如果我有一个 PeopleController,我需要一种干净的方式来确定控制器是否处理 Person 模型。
我查看了 API 并没有找到它的方法。
作为正则表达式与一些ActiveSupport
变形技巧相结合的唯一方法是singularize
?
如果是这样,这种方法有什么陷阱吗?什么是边缘情况?
这只是控制器和模型相关的约定,所以真的没有办法做到这一点。
你想做什么?
假设您遵循模型和控制器名称的 Rails 命名约定,您可以执行以下操作来获取模型名称/类。
# In a controller instance
klass = controller_name.classify.constantize
我只是修改了一个小 KandadaBoggu 答案,以使其对于控制器的任何实例都更加自动化。
# In a controller instance
klass_name = self.class.to_s.gsub(/Controller$/, '').singularize
klass = klass_name.constantize