Wes*_*ter 6 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
我有一个页面,您可以在其中创建发票.有一个单独的部分允许您向发票添加付款.我想要做的是添加创建发票时创建付款的功能.
我想将"创建付款"表单VIEW呈现为"创建发票"表格视图.我怎样才能做到这一点?这是一些代码:
发票表单视图(注意渲染调用):
<%= form_for(@contract) do |f| %>
<div class="field">
f.label "Add payment?"
<div id="pay_form">
<%= render 'payments/pay_form' %>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
(_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>
Run Code Online (Sandbox Code Playgroud)
主要问题是f部分中的变量不存在.即使我给你发票的f,从它的形式变种中,则params的名字是params[:invoice][:amount]不是params[:payment][:amount].看看我在说什么?
这样做的最佳方法是什么?
您需要f将视图中的变量传递给partial.
要做到这一点,改变
<%= render 'payments/pay_form' %>
Run Code Online (Sandbox Code Playgroud)
成
<%= render 'payments/pay_form', f: f %>
Run Code Online (Sandbox Code Playgroud)
您是否会遇到名称错误,因为两者都已命名 f
尝试:
<%= render :partial => 'payments/pay_form', :locals => { :f => f} %>
Run Code Online (Sandbox Code Playgroud)
要么
<%= form_for(@contract) do |builder| %>
<div class="field">
builder.label "Add payment?"
<div id="pay_form">
<%= render 'payments/pay_form', f: builder %>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
为了进一步学习,我认为你真正想要的是嵌套表格.
这里有一些关于这个主题的好教程,如果你有兴趣了解它们:
http://railscasts.com/episodes/196-nested-model-form-part-1 http://railscasts.com/episodes/197-nested-model-form-part-2
| 归档时间: |
|
| 查看次数: |
5793 次 |
| 最近记录: |