1

我有一个 Rails 应用程序,其模型名称Product具有属性price

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

4

1 回答 1

2

是的,您可以在 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
});
于 2012-08-16T22:31:41.540 回答