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

ric*_*cks 2 ruby ruby-on-rails

我正在尝试循环访问一些video对象,并且正在尝试构建一个如下所示的 JSON 数组:

[{"event_name":"video_completed","object_id":123456789}]
Run Code Online (Sandbox Code Playgroud)

我创建了一个方法来执行此操作:

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
Run Code Online (Sandbox Code Playgroud)

我正在创建哈希值,然后将它们转换为 JSON 并将其附加到我的数组中,rules但是当我运行时:

puts rules
Run Code Online (Sandbox Code Playgroud)

我明白了{"event_name":"video_completed","object_id":123456789}

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

这样做的正确方法是什么,以便我可以循环播放多个视频并获得我想要的结果。

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

[{"event_name":"video_completed","object_id":123456789}, {"event_name":"video_completed","object_id":123456789}]
Run Code Online (Sandbox Code Playgroud)

max*_*max 5

您想要首先组成一个 ruby​​ 数组,然后将其转换为 JSON:

rules = videos.map do |video|
  {
    event_name: "video_completed",
    object_id: video.image_hash.to_i
   }
end
rules.to_json
Run Code Online (Sandbox Code Playgroud)

.each仅当您只关心循环的副作用而不是返回值时才应使用。

否则,您应该使用.map、等,这向其他程序员表明.inject.each_with_object关心返回值。