ruby-on-rails 如何告诉form_with与STI类结合使用?

ukxgm1gy  于 2023-02-26  发布在  Ruby
关注(0)|答案(2)|浏览(144)

我有一个类,我使用STI来提供独特的,每种类型的逻辑。我不想为每种独特的类型创建窗体和控制器,我想利用继承,并有一个使用超类Package的控制器,子类甚至没有被引用(在这个阶段)。
新的'form_with'帮助器可以处理99%的情况,但是在这种情况下,下面的代码不起作用。它抛出一个错误,因为@package是核心Package类的子类,而该子类没有路由信息。我需要它来MapPackage类和关联的控制器。

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

wfsdck301#

<%= form_with(@package.becomes[Package]) do |form| %>
  # Form Data Here
<% end %>
s8vozzvw

s8vozzvw2#

这个解决方案看起来有点笨拙,但它是我能想到的最好的。我怀疑它可能是最好的,没有形式,有一些特定的代码来处理/识别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。作用域键也是如此,它重新限定了表单的范围,所以它不会尝试将所有参数嵌套在子类名称下,而不是超类名称下。

相关问题