7

請求書を作成するページがあります。請求書に支払いを追加できる別のセクションがあります。私がやりたいのは、請求書を作成するときに支払いを作成する機能を追加することです。

「支払いの作成」フォームのビューを「請求書の作成」フォームのビューにレンダリングしたいと思います。これどうやってするの?ここにいくつかのコードがあります:

請求書フォームビュー(レンダリング呼び出しに注意):

<%= 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]ます。私が言っていることがわかりますか?

これを行うための最良の方法は何ですか?

4

1 に答える 1

10

fビューからパーシャルに変数を渡す必要があります。

これを行うには、変更します

<%= 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

于 2012-08-03T20:10:13.960 に答える