2012-08-03 47 views
6

Tôi có trang mà bạn tạo hóa đơn. Có một phần riêng biệt cho phép bạn thêm thanh toán vào hóa đơn. Điều tôi muốn làm là thêm khả năng tạo thanh toán khi tạo hóa đơn.Đường ray Hiển thị một phần của biểu mẫu bên trong một biểu mẫu khác

Tôi muốn hiển thị biểu mẫu "Tạo thanh toán" VIEW vào biểu mẫu "Tạo hóa đơn" XEM. Tôi có thể làm cái này như thế nào? Dưới đây là một số mã:

Mẫu Invoice xem (chú ý làm cho cuộc gọi):

<%= 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) Các phần từ các hình thức thanh toán tạo (chú ý tôi không bao gồm thẻ form_for ở đây vì tôi không muốn tiếp tục biểu mẫu bên trong một biểu mẫu khác trên trang Hóa đơn ở trên):

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

Vấn đề chính là biến số f không tồn tại. Và ngay cả khi tôi chỉ định số hóa đơn là f của Hoá đơn, tên của các thông số sẽ là params[:invoice][:amount] thay vì params[:payment][:amount]. Xem tôi đang nói gì?

Cách tốt nhất để thực hiện việc này là gì?

+0

Bạn có kiểm tra [accepts_nested_attributes_for] (http://api.rubyonrails.org/classes /ActiveRecord/NestedAttributes/ClassMethods.html) và [fields_for helper] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for)? –

Trả lời

7

Bạn cần chuyển biến số f từ chế độ xem sang một phần.

Để thực hiện điều này, thay đổi

<%= render 'payments/pay_form' %> 

vào

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

Nếu bạn gặp lỗi tên, vì cả hai được đặt tên f

thử:

<%= render :partial => 'payments/pay_form', :locals => { :f => f} %> 

hoặc

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

Hy vọng điều này sẽ hữu ích.

Để tìm hiểu thêm, tôi nghĩ những gì bạn đang thực sự tìm kiếm là các biểu mẫu lồng nhau.

Dưới đây là một số hướng dẫn tốt về chủ đề này, nếu bạn là thú tìm hiểu về họ:

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

+0

Cảm ơn phản hồi này. Bởi vì làm thế nào tôi có nó, các khoản thanh toán không liên quan trực tiếp với các hợp đồng, vì vậy ban đầu tôi bỏ qua ý tưởng cho accepts_nested_attributes_for. Tuy nhiên, tôi hoàn toàn quên về field_for helper, đó chính xác là những gì tôi cần để có thể sử dụng một phần (sử dụng formbuilder vars 'f') mà không cần tạo một form khác bên trong form gốc. Bạn đã dẫn tôi xuống con đường bên phải! –

Các vấn đề liên quan