Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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
Javascript 生成JSON对象的Rails_Javascript_Jquery_Ruby On Rails_Ruby_Json - Fatal编程技术网

Javascript 生成JSON对象的Rails

Javascript 生成JSON对象的Rails,javascript,jquery,ruby-on-rails,ruby,json,Javascript,Jquery,Ruby On Rails,Ruby,Json,我想在从数据库获取数据时生成一个JSON对象 def duration return @data[:duration] unless @data[:duration].nil? @data[:duration] = per_hour.collect do | val | [val[0], val[1]] end end 我得到了所需的数据,但数组不正确。我的观点是: var array = <%= raw @duration_data.to_json %>;

我想在从数据库获取数据时生成一个JSON对象

def duration
  return @data[:duration] unless @data[:duration].nil?

  @data[:duration] = per_hour.collect do | val |
    [val[0], val[1]]
  end
end
我得到了所需的数据,但数组不正确。我的观点是:

var array = <%= raw @duration_data.to_json %>;
但我需要的是:

var array = [{"data": {"0":0, "1":60.0} }];

您只需将数组转换为哈希:

@data[:duration] = per_hour.collect do |val|
  [val[0], val[1]]
end.to_h
对于Ruby 1.9:

@data[:duration] = Hash[*per_hour.collect { |val| [val[0], val[1]] }]

您只需将数组转换为哈希:

@data[:duration] = per_hour.collect do |val|
  [val[0], val[1]]
end.to_h
对于Ruby 1.9:

@data[:duration] = Hash[*per_hour.collect { |val| [val[0], val[1]] }]

我将这样写:

def duration
  @data[:duration] ||= build_duration
end 
这是一个简短的说法:返回
@data[:duration]
如果不是nil,则为其指定
构建持续时间

然后定义
build\u持续时间

def build_duration
  result = {}
  per_hour.each do |val|
    result[val[0]] = val[1]
  end
  result
end

您可以编写更紧凑的
build\u duration
,但对我来说,这是非常可读的:它将构建一个散列并按照您的意愿填充它。

我将这样写:

def duration
  @data[:duration] ||= build_duration
end 
@data[:duration] ||= per_hour.collect { | val | [val[0], val[1]] }.to_h
这是一个简短的说法:返回
@data[:duration]
如果不是nil,则为其指定
构建持续时间

然后定义
build\u持续时间

def build_duration
  result = {}
  per_hour.each do |val|
    result[val[0]] = val[1]
  end
  result
end
您可以编写更紧凑的
build\u duration
,但对我来说,这是非常可读的:它将构建一个散列并按照您的意愿填充它

@data[:duration] ||= per_hour.collect { | val | [val[0], val[1]] }.to_h
试试这个


试试这个。

我得到了这个错误:对于[[0,3]]我得到了这个错误:对于[[0,3]]我得到了这个错误:对于[[0,3]],这个数组应该返回
pry(main)>[[0,3]]。对于[0,3]],这个数组应该返回
pry(main)>[[0,3]]。谢谢,{code>
<0=>3},但是我在[[0,3]]的未定义方法“to_h”中遇到了这个错误:ArrayYou可能有一个旧的Ruby版本,我将更正答案我正在使用rails 2.1运行。这与rails无关,您需要检查您的Ruby版本。您可以在您的项目根目录中通过在控制台中键入
ruby--version
来实现这一点,但是我在[[0,3]]的未定义方法“to_h”中遇到了此错误:ArrayYou可能有一个旧的ruby版本,我将更正答案否我正在运行rails 2.1这与rails无关,您需要检查您的ruby版本。您可以通过在控制台中键入
ruby--version
在项目根目录中执行此操作