javascript - Rails 将数据从 Controller 传递到 javascript

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

我有一个模型名称为 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 gemgon.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/

相关文章:

ruby-on-rails - rails : Auto-login already signed up user (Facebook/linkedin omniauth)

java - MVC 将整个模型或事件发送到 View

javascript - 在新版本的 jQuery 中,您最兴奋的是什么?

javascript - jQuery .fadeOut() 然后 .show();不使用 keyup

javascript - 如何将对象插入到对象列表的开头,当它具有 unshift 时不是函数错误?

javascript - 如何在 aspx 页面加载时获取文本框值

ruby-on-rails - 如何修复运行 Test::Unit 测试时产生的警告

ruby-on-rails - 成功使用 Azure 机器学习 API?

c# - 由于 Base64 错误,无法将图像上传到数据库

php - Opencart 自定义管理区域 -> 查询仅显示表的第一条记录