获取所有Controller和Action

xiaoxiao2024-06-12  24

最近在做一个基于Controller加Action的权限管理插件,需要得到应用中的所有Controller作为一个列表供用户选择,这可以通过ApplicationController.subclasses得到,但是Rails在启动时并不会自动加载所有Controller,而是当请求到达时,根据路由来决定应该加载那个Controller,因此要使用ApplicationController.subclasses,就必须先require所有的Controller:

def require_all_controllers(path)Dir.new(path).entries.collect do |e|controller_path = File.join(path, e)if e[0] != 46 # 46 = '.'if File.directory?(controller_path)require_all_controllers(controller_path)elsif e =~ /controller.rb$/ApplicationController.require_or_load controller_pathendendendend

require_all_controllers将加载指定目录下的所有以controller.rb结束的文件,你也可以选择将结果缓存起来,这样就不需要每次都重新require了:

@@all_controllers = nildef get_all_controllersrequire_all_controllers("#{RAILS_ROOT}/app/controllers") unless @@all_controllers@@all_controllers ||= ApplicationController.subclassesend

至于Action,可以直接调用Controller的action_methods方法得到。

相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5016067.html

最新回复(0)