Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将此数组传递给html.erb文件中的javascript函数,而不让erb计算Date.UTC?_Ruby On Rails_Ruby_Ruby On Rails 3_Highcharts_Erb - Fatal编程技术网

Ruby on rails 如何将此数组传递给html.erb文件中的javascript函数,而不让erb计算Date.UTC?

Ruby on rails 如何将此数组传递给html.erb文件中的javascript函数,而不让erb计算Date.UTC?,ruby-on-rails,ruby,ruby-on-rails-3,highcharts,erb,Ruby On Rails,Ruby,Ruby On Rails 3,Highcharts,Erb,我试图将HighStock股票图表配置为使用datetime和value的二维数组。这种方法只在Highcharts文档中提到,而不是highstock文档 我的视图帮助文件中有一个方法: def byusers_chart_series(name, byusers) data = [] codes_by_user = byusers.where(:hpmuser => "#{name}").group("date(hpmcreated)").s

我试图将HighStock股票图表配置为使用datetime和value的二维数组。这种方法只在Highcharts文档中提到,而不是highstock文档

我的视图帮助文件中有一个方法:

  def byusers_chart_series(name, byusers)
          data = []
          codes_by_user = byusers.where(:hpmuser => "#{name}").group("date(hpmcreated)").select("date(hpmcreated) as dater, count(globalcode) as codes")
          codes_by_user.each do |record|
            #x = [Date.UTC("#{record.dater.year.inspect.to_i}", "#{record.dater.day.inspect.to_i}", "#{record.dater.month.inspect.to_i}"), "#{record.codes.inspect.to_i}"]
            x = [Date.UTC("#{record.dater.year.inspect.to_i}", "#{record.dater.day.inspect.to_i}", "#{record.dater.month.inspect.to_i}"), "#{record.codes.inspect.to_i}"]
            data << Array(x)
          end

          data
  end
这是html.ERB文件中的代码:

<script type="text/javascript" charset="UTF-8">

    $(function() {
        new Highcharts.StockChart({

            chart : {
                renderTo: 'weeks52dynamic',
                borderColor: '#EBBA95',
                borderWidth: 3
            },

            legend : {
                align : "left",
                enabled : true,
                layout : "vertical",
                verticalAlign : "top"
            },

            rangeSelector : {
                selected : 0
            },

            title : {
                text : 'title'
            },

            scrollbar: {
                barBackgroundColor: 'gray',
                barBorderRadius: 7,
                barBorderWidth: 0,
                buttonBackgroundColor: 'gray',
                buttonBorderWidth: 0,
                buttonBorderRadius: 7,
                trackBackgroundColor: 'none',
                trackBorderWidth: 1,
                trackBorderRadius: 8,
                trackBorderColor: '#CCC'
            },
            xAxis: {
                title: {
                    text: "Date"
                },

                type: "datetime",
                dateTimeLabelFormats: { // don't display the dummy year
            month: '%e. %b',
            year: '%b'
         }

            },
            yAxis: {
                min: 0,
                title: {
                    text: "Number of Codes"
                }


            },
            series: [
            <% { "New Codes" => Newcode.codesperday }.each do |name, newcodes| %>
            {
                name: "<%= name %>",
                 pointInterval: <%= 1.day * 1000 %>,
                 pointStart: <%= 350.weeks.ago.to_i * 1000 %>,
                data: <%= newcodes_chart_series(newcodes, 350.weeks.ago) %>,
                marker : {
                    enabled : true,
                    radius: 3
                }
            },
            <% end %>
            <% { "User" => Newcode.byuser }.each do |name, byusers| %>
            {
                name: "<%= name %>",
                data: <%= byusers_chart_series(name, byusers) %>,
                marker : {
                    enabled : true,
                    radius: 3
                }
            }
            <% end %>
            ]

        });

    });


</script>

$(函数(){
新海图({
图表:{
renderTo:“weeks52dynamic”,
边框颜色:'#EBBA95',
边框宽度:3
},
图例:{
对齐:“左”,
启用:对,
布局:“垂直”,
垂直排列:“顶部”
},
范围选择器:{
已选:0
},
标题:{
文本:“标题”
},
滚动条:{
barBackgroundColor:“灰色”,
半径:7,
宽度:0,
按钮背景颜色:“灰色”,
ButtonOrderWidth:0,
按钮顺序半径:7,
trackBackgroundColor:“无”,
轨道边界宽度:1,
轨道边界半径:8,
trackBorderColor:“#CCC”
},
xAxis:{
标题:{
正文:“日期”
},
键入:“日期时间”,
dateTimeLabelFormats:{//不显示虚拟年份
月份:'%e.%b',
年份:'%b'
}
},
亚克斯:{
分:0,,
标题:{
正文:“代码数”
}
},
系列:[
Newcode.codesperday}。每个do |名称,Newcode |%>
{
姓名:“,
点间隔:,
起点:,
数据:,
标记:{
启用:对,
半径:3
}
},
Newcode.byuser}。每个do |名称,byusers |%>
{
姓名:“,
数据:,
标记:{
启用:对,
半径:3
}
}
]
});
});
我在浏览器中遇到的错误,我认为ERB模板试图评估Date.UTC函数,而不是将其传递给JavaScript。我的问题是,每当我在数组中的Data.UTC周围加上任何类型的引号时,引号就会出现在发送给javascript的最后一个数组中


如何在不让ruby计算的情况下传递数组的精确数组?

在修复过程中,让我们简化您的方法。如果您发现自己使用了这样的代码:

foo = []
bar.each{ … foo << jim }
Ruby代码中有
Date.UTC
,这要求Ruby在构建阵列时运行此代码。与创建数组数组不同,我们将使用将您的
code\u by\u user
转换为字符串数组,这些字符串是您想要的JS代码:

def byusers\u chart\u系列(名称,byusers)
codes_by_user=byusers.where(:hpmuser=>“#{name}”).group(“日期(hpmcreated)”)。选择(“日期(hpmcreated)作为日期器,计数(全局代码)作为代码”)
代码_by_user.map do |记录|
parts=%w[年-月-日].map{s|record.dater.send(s)}
[Date.UTC(#{parts.join(',')}),#{record.codes}]
结束
结束
在你看来:

数据:[],
这将在HTML中生成如下输出:

数据:[[Date.UTC(2011,10,7),42],[Date.UTC(2012,4,3),17],

一个提示:当你有这个代码时:
“{record.dater.year.inspect.to_i}”
你所做的是说“Ruby,给我一个数字(年份);现在把它变成一个字符串(inspect);现在把那个字符串变成一个数字(to_i);现在把那个数字变成一个字符串。(字符串插值
{…}
总是在将表达式的结果放入字符串之前调用
。)因此,对于整数,最好使用简单的代码
“#{record.dater.year}”“
。好的,我正在将你告诉我的这两种简化技术添加到我的代码中,我对使用这两种技术感到内疚。每种技术都可以在多个地方构建一个新的数组。我有一种方法,可以为用户提供唯一的方法,它可以为我提供数据库中的所有用户。使用.map将它从5行减到2行,ruby很棒。现在,如果我想从每个月中减去1来解释javascript中以零为基础的月份,该怎么办?@opensourcechris您可以删除我放在那里的小地图,或者在构建字符串之前添加
parts[1]-=1
foo = []
bar.each{ … foo << jim }
foo = bar.map{ … jim }