在 Rails 应用上使用 JSON 将数据从 Googlesheets 解析到 Ruby 中的 FusionCharts 时未定义的局部变量或方法“parsedData”
Undefined local variable or method `parsedData' when Using JSON to Parse data from Googlesheets To FusionCharts in Ruby on Rails app
我在我的 rails 应用程序中将数据从 Googlesheets
加载到 fusioncharts
。
我使用 Jquery
从 google 工作表中获取数据,如本教程中所示 https://www.sitepoint.com/interactive-javascript-charts-using-data-from-google-sheets/
当我尝试从 pasedData
变量中获取数据时,Rails 总是给我这个错误 undefined local variable or method 'parsedData' for #<GreetingsController:0x007fdb862e9cf8>
。
data: parsedData
我不确定我在这里做错了什么,这是我第一次使用 JSON 将数据加载到 rails 应用程序中的 fusioncharts。任何帮助将不胜感激
这是 Jquery 片段,其中 google 工作表变成了 JSON。
var spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
url = "https://spreadsheets.google.com/feeds/list/" +
spreadsheetId +
"/od6/public/basic?alt=json";
$.get({
url: url,
success: function(response) {
var data = response.feed.entry,
len = data.length,
i = 0,
parsedData = [];
for (i = 0; i < len; i++) {
parsedData.push({
label: data[i].title.$t,
value: data[i].content.$t.replace('income: ', '')
});
}
}
});
这是来自 rails 控制器的 fusionchart 片段
@chart2 = Fusioncharts::Chart.new({
type: 'bar2d',
renderAt: 'chart-container',
width: '100%',
height: '300',
dataFormat: 'json',
dataSource: {
chart: {
caption: "Highest Paid Actors",
yAxisName: "Annual Income (in milion USD)",
numberPrefix: "$",
theme: "fint",
exportEnabled: "1",
},
data: parsedData
}
})
这里是关于 rails 和 fusioncharts https://github.com/fusioncharts/rails-wrapper
的说明
您似乎对 fusioncharts/rails-wrapper
gem 提供的机会感到困惑。
如果您查看此 gem 的源文件(render method), it allows you to construct a Ruby object, which represents your chart and then uses javascript to render a template 和图表。
因此,我在这里看到了 2 个选项。
第一个选择是继续教程:
创建一个具有指定 id
的元素,它将包含您的图表:
<div id="chart-container">
<p>The chart will render here!</p>
</div>
使用 js 在收到数据后立即呈现数据:
var spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
url = "https://spreadsheets.google.com/feeds/list/" +
spreadsheetId +
"/od6/public/basic?alt=json";
$.get({
url: url,
success: function(response) {
var data = response.feed.entry,
len = data.length,
i = 0,
parsedData = [];
for (i = 0; i < len; i++) {
parsedData.push({
label: data[i].title.$t,
value: data[i].content.$t.replace('income: ', '')
});
}
new FusionCharts({
type: 'bar2d',
renderAt: 'chart-container',
width: '100%',
height: '300',
dataFormat: 'json',
dataSource: {
"chart": {
"caption": "Highest Paid Actors",
"yAxisName": "Annual Income (in milion USD)",
"numberPrefix": "$"
},
"data": parsedData
}
}).render();
}
});
通过这种方法,您可以使用 jQuery 获取数据并在指定的容器中解析它,避免后端。
另一种选择是使用 HTTParty gem, for example. And then render the chart by using Ruby interface provided by the fusioncharts-rails gem.
在后端获取数据
但既然你已经使用前端工具实现了大部分功能,为什么不坚持下去呢。
我在我的 rails 应用程序中将数据从 Googlesheets
加载到 fusioncharts
。
我使用 Jquery
从 google 工作表中获取数据,如本教程中所示 https://www.sitepoint.com/interactive-javascript-charts-using-data-from-google-sheets/
pasedData
变量中获取数据时,Rails 总是给我这个错误 undefined local variable or method 'parsedData' for #<GreetingsController:0x007fdb862e9cf8>
。
data: parsedData
我不确定我在这里做错了什么,这是我第一次使用 JSON 将数据加载到 rails 应用程序中的 fusioncharts。任何帮助将不胜感激
这是 Jquery 片段,其中 google 工作表变成了 JSON。
var spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
url = "https://spreadsheets.google.com/feeds/list/" +
spreadsheetId +
"/od6/public/basic?alt=json";
$.get({
url: url,
success: function(response) {
var data = response.feed.entry,
len = data.length,
i = 0,
parsedData = [];
for (i = 0; i < len; i++) {
parsedData.push({
label: data[i].title.$t,
value: data[i].content.$t.replace('income: ', '')
});
}
}
});
这是来自 rails 控制器的 fusionchart 片段
@chart2 = Fusioncharts::Chart.new({
type: 'bar2d',
renderAt: 'chart-container',
width: '100%',
height: '300',
dataFormat: 'json',
dataSource: {
chart: {
caption: "Highest Paid Actors",
yAxisName: "Annual Income (in milion USD)",
numberPrefix: "$",
theme: "fint",
exportEnabled: "1",
},
data: parsedData
}
})
这里是关于 rails 和 fusioncharts https://github.com/fusioncharts/rails-wrapper
的说明您似乎对 fusioncharts/rails-wrapper
gem 提供的机会感到困惑。
如果您查看此 gem 的源文件(render method), it allows you to construct a Ruby object, which represents your chart and then uses javascript to render a template 和图表。
因此,我在这里看到了 2 个选项。
第一个选择是继续教程:
创建一个具有指定 id
的元素,它将包含您的图表:
<div id="chart-container">
<p>The chart will render here!</p>
</div>
使用 js 在收到数据后立即呈现数据:
var spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
url = "https://spreadsheets.google.com/feeds/list/" +
spreadsheetId +
"/od6/public/basic?alt=json";
$.get({
url: url,
success: function(response) {
var data = response.feed.entry,
len = data.length,
i = 0,
parsedData = [];
for (i = 0; i < len; i++) {
parsedData.push({
label: data[i].title.$t,
value: data[i].content.$t.replace('income: ', '')
});
}
new FusionCharts({
type: 'bar2d',
renderAt: 'chart-container',
width: '100%',
height: '300',
dataFormat: 'json',
dataSource: {
"chart": {
"caption": "Highest Paid Actors",
"yAxisName": "Annual Income (in milion USD)",
"numberPrefix": "$"
},
"data": parsedData
}
}).render();
}
});
通过这种方法,您可以使用 jQuery 获取数据并在指定的容器中解析它,避免后端。
另一种选择是使用 HTTParty gem, for example. And then render the chart by using Ruby interface provided by the fusioncharts-rails gem.
在后端获取数据但既然你已经使用前端工具实现了大部分功能,为什么不坚持下去呢。