2

私はこのようなフォームを持っていpaymentsます:

<%= f.label :invoice_id %>
<%= f.select(:invoice_id, current_user.outstanding_invoices_collection) %>

<%= f.label :amount %>
<%= f.text_field :amount %>

どういうわけか、テキストフィールドの値を入力する方法があるのだろうかamount、たとえば、関連付けられたオープンバランスを使用する方法はありinvoiceますか?

私のInvoiceモデルには次の機能があります。

def balance
  payments.map(&:amount).sum - total
end

これはどのように行うことができますか?

4

2 に答える 2

2

ドロップダウンからの請求書の選択に基づいてテキストボックスにデータを入力することを想定しています。その場合

アイデアは

  • 請求書のドロップダウンの変更時にajax呼び出しを行う必要があります。
  • そのajax応答は、テキストボックスの値を更新する必要があります。

そしてrails-3では、これを非堅牢な方法で行うことをお勧めします。ここにあなたがたどることができるリンクがあります。その間、私は何かを機能的にすることを試みます。再び良い結果が得られることを願っています。

値のみを入力する方法をお探しですか?

アップデート:

これがajaxの部分です

#Application.js or any sutable js file
$(function($) {
    $("#your_drop_down_id").change(function() {
        #Your the url to your controller action here
        $.ajax({url: '/get_amount',
        data: 'invoice_id=' + this.value,
        dataType: 'script'})
    });
});

#in get_amount Action
invoice = Invoice.find(params[:invoice_id]) #Other appropriate logic to get the invoice
@amount = invoice.balance

#get_amount.js.erb
$('#your_text_box_id').val('<%= @amount %>');

#routes.rb
#This part is written following the gist: https://gist.github.com/3889180 by @TinTin
resources :payments do  
   collection do
       get 'get_amount'
   end
end

混乱している部分があれば教えてください。

于 2012-10-14T15:43:51.480 に答える
1

コントローラでは、任意のフィールドに任意の値を割り当てることができ、それがビューに表示されます。

def new
  @payment = new Payment()
  @payment.amount = 100
end

コンボボックスの選択に基づいて動的な値が必要な場合は、javascriptまたはAJAXを使用して実行します。

于 2012-10-14T15:43:19.030 に答える