以编程方式在Rails中创建控制器

时间:2010-03-25 21:50:36

标签: ruby-on-rails

在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。

创建一堆空文件真的是最好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

您确定需要多个控制器吗?你能有一个控制器传递一个值来表明它的行为吗?您还可以创建一个具有共同功能的模块,并且具有仅引用该模块的空控制器文件。

可以使用路径传递类型:

map.route "/:type_of_contact/:action/:id/, {:controller => :contact_type}

现在在所有操作中,在params中你有关键:type_of_contact来指导你的系统。

您需要确保它接近路线的末尾,因此它不会覆盖对其他控制器的访问权限。