在Rails中动态创建控制器的最佳方法是什么。
我有一个类需要生成一堆继承它的控制器。我可以在/ app / controllers中创建一堆文件,但它们基本上都是空文件。必须有一种方法可以动态生成这些类,并将它们视为Rails中的其他控制器,例如:在开发模式下正确重新加载。
我尝试将其放入配置/初始化程序中:
FL.contact_types.each do |contact_type|
controller_name = "#{contact_type.pluralize}Controller"
Object.const_set(controller_name.to_sym, Class.new(ContactsController)) unless Object.const_defined?(controller_name.to_sym)
end
这很有用,但我遇到了依赖/重载问题,并且“从模块树中删除了AuthenticatedSystem的副本但仍处于活动状态”,因为ContactsController继承自包含AuthenticatedSystem的ApplicationController。
创建一堆空文件真的是最好的解决方案吗?
答案 0 :(得分:2)
您确定需要多个控制器吗?你能有一个控制器传递一个值来表明它的行为吗?您还可以创建一个具有共同功能的模块,并且具有仅引用该模块的空控制器文件。
可以使用路径传递类型:
map.route "/:type_of_contact/:action/:id/, {:controller => :contact_type}
现在在所有操作中,在params中你有关键:type_of_contact来指导你的系统。
您需要确保它接近路线的末尾,因此它不会覆盖对其他控制器的访问权限。