怎么了?
我正在使用rails 3.2.3和ruby 1.9.2p290。
我的模型购买有许多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 =&gt;是的,但是使用此标记,用户必须单击链接才能调用远程函数。在我的应用程序的其他部分,我使用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方法从params构建完整的购买(我不知道如何从javascript)。
我查看了几种不同的方法,但没有给出一个集成的解决方案,用于从javascript事件发出ajax请求,并让视图为我的嵌套属性创建嵌套字段(我必须记住buy_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。
任何人都可以指出我如何实现这一目标?
答案 0 :(得分: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,它可以填充\重新创建你的表
如果看不到,我帮不了你。