Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中以编程方式创建控制器_Ruby On Rails - Fatal编程技术网

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

Ruby on rails 在Rails中以编程方式创建控制器,ruby-on-rails,Ruby On Rails,在Rails中动态创建控制器的最佳方法是什么 我有一个类需要生成一组从中继承的控制器。我可以在/app/controllers中创建一堆文件,但它们基本上都是空文件。必须有一种方法来动态生成这些类,并将它们像Rails中的其他控制器一样对待,例如在开发模式下正确地重新加载 我尝试将其放入配置/初始值设定项中: FL.contact_types.each do |contact_type| controller_name = "#{contact_type.pluralize}Controll

在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


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

您确定需要多个控制器吗?你能有一个单一的控制器来传递一个值来指示它的行为吗?您还可以创建一个具有通用功能的模块,并创建只引用该模块的空控制器文件

可以使用路由传递输入:

map.route "/:type_of_contact/:action/:id/, {:controller => :contact_type}
现在,在所有操作中,在params中,您有一个键:键入\u of_contact来引导您的系统


您需要确保这已接近路由的末尾,因此不会覆盖对其他控制器的访问。

听起来您需要一个针对特定传入操作集的全面控制控制器。嗯,我想我需要一个针对每个联系人类型的单独控制器。他们都是联系人,但也有一些人有一个或两个额外的领域,所以STI似乎是正确的选择。这是可行的,但我只是想绕过所有做同样事情的控制器,所以我让它们都继承自ContactsController。不过,我可以摆脱额外的控制器,通过ContactsController做所有事情。我只需要显式地设置类型,而不能将形式_用于magic。不过,我想这仍然是一条路要走。只是不同的混乱。好吧,我采用了通过我的联系人控制器运行所有东西的解决方案。我不喜欢它,但似乎双方都有权衡。这样看来,我不得不使用更少的黑客。我想这说明了什么谢谢你没有理由不使用表格。如果将实例变量传递给它:那么就不需要关心特定的类型。如果您确实关心特定的类型,那么可以根据类型列将变量设置为符号。