調子はどう?
ruby 1.9.2p290 で Rails 3.2.3 を使用しています。
多くの purchase_payments を持つモデル Purchase があります。
class Purchase < ActiveRecord::Base
has_many :purchase_payments, :class_name => 'PurchasePayment', :dependent => :destroy
accepts_nested_attributes_for :purchase_payments
def Purchase.build_payments(count)
#Creat #count payments with some logic for each of them
end
end
私のフォームには、number_field があります。
<td>
<%= f.number_field :payments_count, :min => 0 %>
</td>
ここで、支払い回数に基づいて purchase_payment フィールドを表示させたいと思います。そのために、私は特定のdivを持っています:
<div id="purchase_payments_space"> </div>
これまでに見つけたすべてのリソースは、 link_to ... 、 :remote => true などのヘルパー タグによって生成された ajax について説明していますが、このタグを使用すると、ユーザーはリンクをクリックしてリモート関数を呼び出す必要があります。私のアプリの他の部分では、jquery ajax request を使用しており、コントローラーにリクエストを送信するために次のように使用しようとしています。
function load_payments() {
$.ajax({
type: "POST",
url: "/purchases/build_payments/" + document.getElementById("purchase_payments_count").value,
});
}
$(document).ready(function() {
$("#purchase_payments_count").change(load_payments);
}
私のコントローラーでは、クラス宣言の直後に Respond_to :js と次のメソッドがあります。
def build_payments
pc = params[:payments_count].to_i
@purchase = Purchase.new
@purchase_payments = Purchase.build_payments pc
respond_to do |format|
format.js
end
end
このようにして、 app/views/purchases/buid_payments.js.erb を正常に実行できます。問題は、フォームに含める必要がある支払いのコレクションを作成していて、現在行っている方法では、Rails がこれを行うようには見えないということです。この方法では、js.erb ファイルに多くのコードを記述する必要がありますが、create メソッドで params から完全な購入を作成する方法がわかりません (フォームを作成する方法がわかりません)。ジャバスクリプト)。
私はいくつかの異なる方法を見ましたが、javascript イベントから ajax リクエストを作成し、ビューにネストされた属性のネストされたフィールドを作成させるための統合ソリューションを提供したものはありません (覚えておく必要がある purchase_payment のコレクション)。
http://railscasts.com/episodes/196-nested-model-form-part-1とhttp://railscasts.com/episodes/197-nested-model-form-part-2を見ましたが、それらは上に構築されていますlink_to や link_to_function などのヘルパー メソッド。
どうすればそれを達成できますか?