我有一个类,我正在使用STI来提供独特的每类型逻辑。我不想要为每个唯一类型创建表单和控制器,我想利用继承并使用超类Package
的单个控制器,甚至没有引用子类(在这个阶段)。
新的'form_with'帮助程序为我处理99%的案例,但在这种情况下,下面的代码不起作用。它抛出一个错误,因为@package是核心Package类的子类,并且该子类没有路由信息。我需要它来映射Package类和相关的控制器。
<%= form_with(model: [@show, @package], local: true) do |form| %>
# Form Data Here
<% end %>
答案 0 :(得分:-1)
这个解决方案似乎有点习惯,但它是我能想到的最好的解决方案。我怀疑它可能 是最好的,缺席的形式_有一些特定的代码来处理/识别我找不到文档的STI。
<%= form_with(url: show_packages_path(@show,@package),scope: 'package' ,model: [@show, @package], local: true) do |form| %>
# Form data Here
<% end %>
通过使用show_packages_path
帮助程序,我能够强制将路由范围限定为特定路由。它不是那么干净和灵活,但额外的代码专门用于处理STI。范围键也是如此,它重新调整了表单的范围,因此它不会尝试将所有参数嵌套在子类名称下而不是超类名称。