2012-07-25 71 views
0

發生了什麼?Rails - 從javascript事件發出ajax請求並加載部分

我使用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 ...:遠程=>真實的,但使用這個標籤,用戶將不得不點擊鏈接來調用遠程函數。在我的應用程序的另一部分,使用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 

這樣,我有我的應用程序/視圖/採購/ buid_payments.js.erb運行正常。 問題是,我正在構建一個應該包含在我的表單中的支付集合,並且按照我目前所做的方式執行操作看起來並不像rails會這樣做。這樣,我將不得不在js.erb文件中編寫大量代碼,並且仍然無法弄清楚如何讓create方法從params中構建完整的購買(我不知道如何從javascript)。

我看了幾種不同的方法,但都沒有給出一個集成的解決方案,用於從javascript事件發出ajax請求,並讓視圖爲我的嵌套屬性(我必須記住它的一個purchase_payment集合)創建嵌套字段。

我看到http://railscasts.com/episodes/196-nested-model-form-part-1http://railscasts.com/episodes/197-nested-model-form-part-2,但那些建立在helper方法之上,比如link_to和link_to_function。

任何人都可以指出我該怎麼做到這一點?

回答

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可以填充\重新創建表

如果不能看到它,我不能幫你。

+0

對不起,但我不明白這將如何改變服務器的響應。 – HFSDevBR 2012-07-25 18:00:43