我的目标是为这个控制器的视图创建快速 url。有点像某些网站如何通过 domain/* 映射来查看用户的个人资料。除了简单地将这条规则放在文件末尾的路由 rb 中之外,我还想防止用户无意中(或故意将其 URL 命名为控制器)。所以我需要一种快速的方法来获取控制器的所有名称,然后我将在我的模型中编写一个自定义验证器来告诉用户指定的 url 是保留的。
那么如何获得所有控制器的列表呢?
我的目标是为这个控制器的视图创建快速 url。有点像某些网站如何通过 domain/* 映射来查看用户的个人资料。除了简单地将这条规则放在文件末尾的路由 rb 中之外,我还想防止用户无意中(或故意将其 URL 命名为控制器)。所以我需要一种快速的方法来获取控制器的所有名称,然后我将在我的模型中编写一个自定义验证器来告诉用户指定的 url 是保留的。
那么如何获得所有控制器的列表呢?
ActiveSupport 向 Class 对象添加了一个“子类”属性,因此您应该能够调用 ApplicationController.subclasses 并获取所有已定义控制器的列表。不保证这是可取的。
冒着听起来微不足道的风险,我想说也许您可以尝试在某个数组中添加控制器名称并在创建新用户之前进行检查?这样,应用程序就不会在每次需要创建用户时浪费资源列出目录。
我找到了另一种方法。这是一个坏主意吗?我觉得,它比不必要地加载所有控制器更好?
controller_list = Array.new
Dir["app/controllers/*.rb"].each do |file|
controller_list.push(file.split('/').last.sub!("_controller.rb",""))
end