我正在尝试遍历一些 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/