gpt4 book ai didi

ruby-on-rails - Rails 在另一个窗体中渲染窗体的一部分

转载 作者:行者123 更新时间:2023-12-04 03:34:18 25 4
gpt4 key购买 nike

我有一个页面,您可以在其中创建发票。有一个单独的部分允许您向发票添加付款。我想要做的是在创建发票时添加创建付款的功能。

我想将“创建付款”表单 View 呈现为“创建发票”表单 View 。我怎样才能做到这一点?这是一些代码:

发票表单 View (注意渲染调用):

<%= form_for(@contract) do |f| %>
<div class="field">
f.label "Add payment?"
<div id="pay_form">
<%= render 'payments/pay_form' %>
</div>
</div>

(_pay_form.html.erb) 创建付款表单中的部分(注意我没有在这里包含 form_for 标记,因为我不想在上面的发票页面上的另一个表单内的一个表单中):
<div class="field">
<%= f.label 'Amount Paid:' %>
<%= f.text_field :amount %>
</div>
<div class="field">
<%= f.label 'Payment Method' %>
<%= f.select :method, %w(Cash Credit Check) %>
</div>

主要问题是 f部分中的变量不存在。即使我分配了发票的 f从它的形式来看,参数的名称将是 params[:invoice][:amount]而不是 params[:payment][:amount] .明白我在说什么吗?

这样做的最佳方法是什么?

最佳答案

您需要通过 f从 View 到局部变量。

要做到这一点,改变

<%= render 'payments/pay_form' %>

进入
<%= render 'payments/pay_form', f: f %>

如果您遇到名称错误,因为两者都被命名为 f
尝试:
<%= render :partial => 'payments/pay_form', :locals => { :f => f} %>

或者
<%= form_for(@contract) do |builder| %>
<div class="field">
builder.label "Add payment?"
<div id="pay_form">
<%= render 'payments/pay_form', f: builder %>
</div>
</div>

希望这可以帮助。

为了进一步学习,我认为您真正要寻找的是嵌套表单。

这里有一些关于这个主题的很好的教程,如果你有兴趣学习它们:

http://railscasts.com/episodes/196-nested-model-form-part-1
http://railscasts.com/episodes/197-nested-model-form-part-2

关于ruby-on-rails - Rails 在另一个窗体中渲染窗体的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com