你能用JS刷新嵌套对象,这样依赖于父属性的属性也会被重新加载吗



我有一个Plan模型,它是has_manyVersions。我正在Plan表单中嵌套Version表单。

表单

<%= simple_form_for @plan do |f| %>
<%= f.simple_fields_for :version do |v| %>
<%= v.input :amount, hint: "#{pricing_model_hint_for_amount(@version)}" %>
<% end %>
<% end %>

我在计划中构建版本控制器#新动作:

控制器动作

def new
@plan = current_account.plans.build
@version = @plan.versions.build
end

例如,amount输入的@version提示取决于其父Plan的一个名为:pricing_model的属性。输入的hint属性使用一个助手,该助手将查看@version.plan.pricing_model以从YAML文件中获取正确的提示。

助手

def pricing_model_hint_for_amount(version)
t("simple_form.hints.version.pricing_model.#{version.plan.pricing_model}")
end

问题:

因为@version是在加载表单时实例化的,所以当我更改表单中的@planpricing_model时,提示不会动态更新。

是否有一种方法(使用或不使用Javascript(重新加载嵌套的@plan,以便在其父级中的某些内容发生更改时相应地更新表单提示?如果没有,是否有一种方法可以重新加载提示字段本身,以便在再次使用辅助对象时获得相同的结果?

我希望我解释了自己,否则请告诉我。谢谢

您使用的是什么版本的rails?

如果你在rails 7上,你应该考虑使用其中一种:

一个刺激控制器来监听变化并更新工具提示。(更多js(

如何创建控制器,以及您可以收听的操作。

或:

涡轮增压框架,可根据需要重新加载您的表单部分。(更多红宝石色(

最新更新