Ruby on rails 如何与STI课程一起讲述form_?

Ruby on rails 如何与STI课程一起讲述form_?,ruby-on-rails,Ruby On Rails,我有一个使用STI的类,用于提供唯一的每类型逻辑。我不想为每个唯一的类型创建表单和控制器,我想利用继承,使用超类Package,使用单个控制器,子类甚至没有被引用(在这个阶段) 新的“form_with”助手为我处理了99%的案例,但在这种情况下,下面的代码不起作用。它抛出一个错误,因为@package是核心包类的一个子类,而该子类没有路由信息。我需要它来映射包类和关联的控制器 <%= form_with(model: [@show, @package], local: true) do

我有一个使用STI的类,用于提供唯一的每类型逻辑。我不想为每个唯一的类型创建表单和控制器,我想利用继承,使用超类
Package
,使用单个控制器,子类甚至没有被引用(在这个阶段)

新的“form_with”助手为我处理了99%的案例,但在这种情况下,下面的代码不起作用。它抛出一个错误,因为@package是核心包类的一个子类,而该子类没有路由信息。我需要它来映射包类和关联的控制器

<%= form_with(model: [@show, @package], local: true) do |form| %>
  # Form Data Here
<% end %>

#这里的表单数据

这个解决方案似乎有点骇客化,但它是我能想到的最好的解决方案。我怀疑它可能是最好的,缺少一些特定代码来处理/识别我找不到文档的STI

<%= form_with(url: show_packages_path(@show,@package),scope: 'package' ,model: [@show, @package], local: true) do |form| %>
  # Form data Here
<% end %>

#这里的表单数据
通过使用
show\u packages\u path
helper,我可以强制将路由范围限定到特定的路由。它没有那么干净和灵活,但是额外的代码专门用于处理STI。作用域键也是如此,它重新定义了表单的作用域,因此它不会尝试将所有参数嵌套在子类名称而不是超类名称下