这是怎么回事?
我正在使用带有 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-1和http://railscasts.com/episodes/197-nested-model-form-part-2但这些都建立在上面像 link_to 和 link_to_function 这样的辅助方法。
谁能指出我该如何做到这一点?