0

这是怎么回事?

我正在使用带有 ruby​​ 1.9.2p290 的 rails 3.2.3。

我有一个模型 Purchase 有很多 purchase_payments:

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>

到目前为止,我发现的每一个资源都谈到了由帮助标签生成的 ajax,比如 link_to ... , :remote => true,但是使用这个标签,用户必须点击链接才能调用远程函数。在我的应用程序的其他部分,我使用 jquery ajax 请求,我正在尝试使用这样的方式将请求发送到我的控制器:

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 方法从参数构建完整的购买(我不知道如何从的JavaScript)。

我查看了几种不同的方法,但没有一个提供从 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 回答