如何结合STI课程告诉form_with?

时间:2018-01-10 02:07:21

标签: ruby-on-rails

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

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

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

1 个答案:

答案 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。范围键也是如此,它重新调整了表单的范围,因此它不会尝试将所有参数嵌套在子类名称下而不是超类名称。