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

标签 ruby-on-rails ruby

我正在尝试遍历一些 video 对象,并且正在尝试构建一个如下所示的 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

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

puts rules

我得到 {"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}]

最佳答案

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

rules = videos.map do |video|
  {
    event_name: "video_completed",
    object_id: video.image_hash.to_i
   }
end
rules.to_json

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

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

关于ruby-on-rails - 如何从循环中在 ruby​​ 中创建 JSON 对象的 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53339960/

相关文章:

ruby-on-rails - 未定义的方法 `before_create'

ruby-on-rails - 退出 ActiveAdmin 后重定向

ruby - 无法加载远程 gem : stack level too deep (SystemStackError)

ruby - 如何调用redis.evalsha

ruby-on-rails - 如何在单表继承中运行子类的验证?

mysql - 在 ruby​​ Rails 中分配外键

ruby-on-rails - 猴子修补 Rails gem 的安全和最佳方法

ruby - ruby 混淆中的正则表达式匹配

ruby - rake 错误 : "warning: already initialized constant FileUtils::OPT_TABLE"

mysql - rails 4 : how to use UNIX_TIMESTAMP with group YEAR + MONTH