我有一个模型名称为 Product
的 Rails 应用程序,该应用程序具有属性 price
def index
@products = Product.all
我想绘制一个图表,x-axis
是产品编号,y-axis
是产品价格。我将一个数组从 Controller 传递到 app/assets/javascripts/products.js.coffee
。该阵列是
[[product1.id, product1.price],
[product2.id, product2.price],
[product3.id, product3.price]]
我使用 gon gem
来帮助我传递数据。以下是我如何更改 Controller :
def index
@products = Product.all
gon.prices = []
@products.each do |x|
gon.prices.append([x.id, x.price])
end
end
感谢 gon gem
,gon.prices
将在 app/assets/javascripts/products.js.coffee
中可用。
我的问题是,在 Controller 内部创建一个数组数组似乎不是一个好习惯。我的问题是:无论如何我可以将整个 @products
传递给 javascript 并在 javascript 中而不是在 Controller 中提取数组?所以我可以做 gon.products = @products
最佳答案
是的,您可以在 JavaScript 中执行此操作,但这将需要您进行自定义编码。
就生成数组而言,您为什么不执行以下操作:
@products = Products.all
@array = @products.map { |p| [p.id, p.price] }
我个人手动将数据传递给 JavaScript,而不是依赖像 gon 这样的 gem。这样更干净。
在 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
});
关于javascript - Rails 将数据从 Controller 传递到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994985/