Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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/22.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 如何在ruby中从循环创建JSON对象的JSON数组_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在ruby中从循环创建JSON对象的JSON数组

Ruby on rails 如何在ruby中从循环创建JSON对象的JSON数组,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图循环浏览一些视频对象,并尝试构建一个JSON数组,如下所示: [{"event_name":"video_completed","object_id":123456789}] 我创建了一个方法来执行此操作: def self.getEngagementRules(videos) rules = [] videos.each do |video| rule = { event_name: "video_completed",

我试图循环浏览一些
视频
对象,并尝试构建一个JSON数组,如下所示:

[{"event_name":"video_completed","object_id":123456789}]
我创建了一个方法来执行此操作:

def self.getEngagementRules(videos)

    rules = []

    videos.each do |video|

        rule = {
            event_name: "video_completed",
            object_id: video.image_hash.to_i
        }

        rules << rule.to_json
    end

    rules
end
我得到
{“事件名称”:“视频完成”,“对象id”:123456789}

而不是
[{“事件名称”:“视频已完成”,“对象id”:123456789}]

正确的方法是什么?这样我就可以循环浏览多个视频并获得我想要的结果

它应该能够处理多个视频和输出:

[{"event_name":"video_completed","object_id":123456789}, {"event_name":"video_completed","object_id":123456789}]

您的代码工作正常,您有一个数组,但是
put
将数组的每个元素打印在单独的行中

puts [1, 2, 3]

1
2
3

您的代码工作正常,您有一个数组,但是
put
将数组的每个元素打印在单独的行中

puts [1, 2, 3]

1
2
3

您希望首先组成一个ruby数组,然后将其转换为JSON:

rules = videos.map do |video|
  {
    event_name: "video_completed",
    object_id: video.image_hash.to_i
   }
end
rules.to_json
。仅当您只关心循环的副作用而不关心返回值时,才应使用每个


否则,您应该使用,
.inject
。每个\u都带有\u对象
等,这向其他程序员表示您关心返回值(并且知道您在做什么)。

您希望首先组成一个ruby数组,然后将其转换为JSON:

rules = videos.map do |video|
  {
    event_name: "video_completed",
    object_id: video.image_hash.to_i
   }
end
rules.to_json
。仅当您只关心循环的副作用而不关心返回值时,才应使用每个


否则,您应该使用,
.inject
。每个带有对象的\u
等,这向其他程序员表示您关心返回值(并且知道您在做什么)。

您的代码工作正常,您不是错误地打印了
规则而不是
规则
?此外,数组中的每个元素都是一个字符串,表示一个JSON
[“{\”事件名称\“:\”视频完成\“,\”对象id \“:1234}”]
您的代码运行良好,您不是错误地打印了
规则而不是
规则
?此外,数组中的每个元素都是一个字符串,表示一个JSON
[“{”event\u name\“:“video\u completed\”,“object\u id\”:1234}”]
你所说的“循环的副作用”是什么意思?例如,在ERB模板中,你使用的是
。每个
,因为你正在输出到一个字符串缓冲区,并且没有使用返回值。谢谢!我可能需要浏览一下我的项目,看看还有什么地方可以使用map来代替每个hahaw你说的“循环的副作用”是什么意思?例如,在ERB模板中,你使用
。每个
,因为你要输出到一个字符串缓冲区,并且没有使用返回值。谢谢!我可能需要通过我的项目,看看还有什么地方我可以使用地图,而不是每个哈哈