2012-08-16 86 views
1

我有,有一個型號名稱Product一個Rails應用程序屬性priceRails的從控制器將數據傳遞到JavaScript的

def index 
    @products = Product.all 

我要畫一個圖表與x-axis是產品ID和y-axis是產品的價格。我將數組從控制器傳遞到app/assets/javascripts/products.js.coffee。陣列是 [[product1.id, product1.price], [product2.id, product2.price], [product3.id, product3.price]]

我使用gon gem來幫助我傳遞數據。下面是我如何改變控制器:

def index 
@products = Product.all 
gon.prices = [] 
@products.each do |x| 
    gon.prices.append([x.id, x.price]) 
end 
end 

gon.prices將可在app/assets/javascripts/products.js.coffee,感謝gon gem

我的問題是,它似乎不是一個好的做法,在控制器內部創建一個數組的數組。我的問題是:無論如何,我可以將整個@products傳遞給JavaScript,並提取JavaScript內的數組而不是在控制器內?所以我可以做gon.products = @products

+0

AJAX將從服務器端代碼傳遞給JavaScript的最佳方式。像jQuery這樣的事情會讓這很容易做到。 – 2012-08-16 20:35:08

+0

謝謝。你能否提供更多細節? – qusr 2012-08-16 20:37:07

回答

2

是的,你可以在JavaScript中做到這一點,但它會要求你自定義編碼。

至於產生陣去,你爲什麼不這樣做如下:

@products = Products.all 
@array = @products.map { |p| [p.id, p.price] } 

我親手做的數據傳遞到JavaScript的手,而不是依靠一個寶石狀坤。這樣清潔。

在JavaScript中,假設您已經全部建立了資源JSON(這樣,你可以訪問/products.json並獲得JSON),並假定你正在使用jQuery,那麼你的JavaScript可以做到以下幾點:

// fetch the json file and parse 
jQuery.getJSON('/products.json', function(data) { 
    // convert the results into chart data 
    var data_for_chart = jQuery.map(data.products, function(product) { 
    return [product.id, product.price]; 
    }); 
    // do something with the data 
}); 
相關問題