【问题标题】:Rails passing data from controller to javascriptRails 将数据从控制器传递到 javascript
【发布时间】:2012-08-13 06:20:31
【问题描述】:

我有一个型号名称为Product 的Rails 应用程序具有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 gem,此gon.prices 将在app/assets/javascripts/products.js.coffee 中可用。

我的问题是,在控制器中创建数组数组似乎不是一个好习惯。我的问题是:无论如何我可以将整个 @products 传递给 javascript 并在 javascript 内部而不是在控制器内部提取数组?所以我可以做gon.products = @products

【问题讨论】:

  • AJAX 是将某些东西从服务器端代码传递到 JavaScript 的最佳方式。像 jQuery 这样的东西会让这很容易做到。
  • 谢谢。能否请您提供更多详细信息?

标签: javascript ruby-on-rails model-view-controller charts


【解决方案1】:

是的,您可以在 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
});

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2017-10-12
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多