0

調子はどう?

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-1http://railscasts.com/episodes/197-nested-model-form-part-2を見ましたが、それらは上に構築されていますlink_to や link_to_function などのヘルパー メソッド。

どうすればそれを達成できますか?

4

1 に答える 1

0
$.ajax({
    url: "purchases/build_payments",
    type: 'POST',
    data: $('#purchase_payments_count').val(),
    dataType: 'html',
    headers: {
      'X-CSRF-Token': '<%= form_authenticity_token.to_s %>'
    }
});

それから

def build_payments
  pc = params[:payments_count].to_i
  @purchase = Purchase.new

  @purchase_payments = Purchase.build_payments pc

  respond_to do |f|
    f.js {}
  end
end

テーブルに入力/再作成できるbuid_payments.js.erbを実行します

見えないなら助けようがない。

于 2012-07-25T17:23:45.007 に答える