2011-12-22 64 views
1

前言:我是Rails的新手。對JQuery和json也是一種新鮮的東西。 我目前從我的控制器呈現HTML這樣:在Rails 3視圖中渲染html和json以與jQuery解析

def new 
    @customer = Customer.find(params[:id]) 
end 

我使用@customer實例來設置我的表單字段。我也有這種形式的兩個選擇幫手:

<%= select(:customer, :billing_type_id, BillingType.all.map{ |lk| [lk.name, lk.id] })%> 
<%= select(:customer, :account_id, Account.all.map{ |lk| [lk.number, lk.id] }) %> 

這兩個選擇列表都綁定到我的客戶模型。 BillingType模型belongs_to帳戶。 選擇BillingType後,我想自動選擇相關帳戶。允許用戶選擇除默認值以外的帳戶,這就是爲什麼兩者都在客戶模型上。自動選擇帳戶的目的純粹是爲了方便用戶。

我的第一個想法是以某種方式返回BillingType.all.to_json作爲我的控制器的新動作的一部分。然後,如果該json在客戶端可用,我可以解析它並在JQuery中連線更改事件以在選擇BillingType時選擇默認帳戶。

所以我的問題是真的分爲兩個部分:

  1. 什麼是軌道的方式來完成設置相關的選擇選項?

  2. 不管正確的方法是完成我的目標,我現在好奇如何從控制器操作同時返回json和html。我真的不認爲我想從我的文檔加載事件發出ajax請求,因爲這需要往返服務器。有沒有辦法簡單地將所有BillingType作爲json呈現給標記,以便我可以用JQuery引用它並解析json?我覺得我想要做這樣的事情:

jQuery中:

var obj = jQuery.parseJSON($("#billingtypes")); 

鑑於:

<span id="billingtypes"><%= BillingType.all.to_json %></span> 

我可能這一切都錯了,但很欣賞了解如何處理我的兩個問題。

回答

0

一種方法的確可以實現頁面中的帳單類型。

東西沿着

var billingTypes = <%= BillingType.all.to_json %>; 

在您的網頁上的腳本標記線將創建與信息javascript變量。無需解析!

另一種方法是你的選擇標記添加數據屬性的選項標籤,即改變

<%= select(:customer, :billing_type_id, BillingType.all.map{ |lk| [lk.name, lk.id, :'data-account-id' => lk.default_account_id] } %> 

我假設在這裏,您的帳單類型有default_account_id方法/屬性返回的id要使用的帳戶。我已經附加帳戶的ID選擇個別選項標籤,然後你可以這樣做

$('#id_of_your_select').change(function(){ 
    var accountId = $(':selected', $(this)).data('account-id'); 
// do something cool with accountId 
}); 
+0

選項標籤是偉大的,我不知道你能做到但─它完全解決了我的問題!另外,直接在腳本標記中直接渲染BillingType json也是可行的。我想測試選項標籤的想法,然後我將其標記爲答案。 – 2011-12-22 02:21:24

+0

弗雷德裏克,我測試了選項標籤,它的工作,謝謝你的答案! – 2011-12-22 14:44:33

+0

對於閱讀此內容的人來說,需要對javascript進行小的修改:\t $('#returned_check_billing_type_id')。change(function(){ \t var accountId = $(':selected',this).attr(' ); \t alert(accountId); \t //做一些很酷的事情,賬號Id \t}); – 2011-12-23 14:43:20