2012-08-03 5 views
6

請求書を作成するページがあります。インボイスに支払いを追加できる別のセクションがあります。私がしたいことは、請求書を作成する際に支払いを作成する機能を追加することです。Rails別のフォーム内のフォームの一部をレンダリングする

私は、 "請求書作成"フォーム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 varをフォームから割り当てても、params[:payment][:amount]ではなく、params[:invoice][:amount]となります。私の言っていることを見て?

これを行う最善の方法は何ですか?

+0

あなたは([accepts_nested_attributes_for]確認しましたhttp://api.rubyonrails.org/classes /ActiveRecord/NestedAttributes/ClassMethods.html)と[fields_forヘルパー](http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for) –

答えて

7

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

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

<%= render 'payments/pay_form' %> 

を変更両方が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

+0

この応答に感謝します。私がそれを持っているので、支払いは契約に直接関連していないので、もともと私はaccepts_nested_attributes_forの考えを無視しました。しかし、私はfields_forヘルパーを完全に忘れていました。これは元のフォームの中に別のフォームを作成せずにpartial(formbuilder vars 'f'を使った)を使用できるようにするためです。あなたは私を正しい道に導いた! –

関連する問題