1

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.pricesは で利用できるようになります。app/assets/javascripts/products.js.coffeegon gem

私の問題は、コントローラー内に配列の配列を作成することは良い習慣ではないように思われることです。私の質問は次のとおりです。全体@productsをjavascriptに渡し、コントローラー内ではなくjavascript内に配列を抽出することはできますか? だから私はできるgon.products = @products

4

1 に答える 1

2

はい、これは JavaScript で行うことができますが、カスタム コーディングが必要になります。

配列の生成に関する限り、次のようなことをしてみませんか。

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

個人的には、gon のような gem に頼るのではなく、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
});
于 2012-08-16T22:31:41.540 に答える