我有一个类,我使用STI来提供独特的,每种类型的逻辑。我不想为每种独特的类型创建窗体和控制器,我想利用继承,并有一个使用超类Package
的控制器,子类甚至没有被引用(在这个阶段)。
新的'form_with'帮助器可以处理99%的情况,但是在这种情况下,下面的代码不起作用。它抛出一个错误,因为@package是核心Package类的子类,而该子类没有路由信息。我需要它来MapPackage类和关联的控制器。
<%= form_with(model: [@show, @package], local: true) do |form| %>
# Form Data Here
<% end %>
2条答案
按热度按时间wfsdck301#
s8vozzvw2#
这个解决方案看起来有点笨拙,但它是我能想到的最好的。我怀疑它可能是最好的,没有形式,有一些特定的代码来处理/识别STI,我找不到文档。
通过使用
show_packages_path
帮助器,我可以强制将路由范围限定为一个特定的路由。它不那么干净和灵活,但是有额外的代码专门处理STI。作用域键也是如此,它重新限定了表单的范围,所以它不会尝试将所有参数嵌套在子类名称下,而不是超类名称下。