我正在用 Ruby 和 Sinatra 设计一个 REST API。我只有一个问题:我正在尝试迭代从 MySQL 中选择的一系列帖子。格式是
[{:post => "Hello, world!", :comments => [{:author => "user1", :content => "Goodbye, world!"}]}, ...]
因此,它是一个包含内容帖子和评论的散列数组,而评论键具有另一个数组和包含评论作者和内容的散列。
我有以下代码从 MySQL 中提取一组帖子(以包含哈希的数组返回),然后遍历这些哈希。对于数组中的每个散列,它获取帖子 ID 并查询 MySQL 以获取与该帖子关联的任何评论。然后它将帖子和评论推送到哈希,这是推送到返回的数组。
def get_post(id = 'null', profile = 'null', owner = 'null')
r = Array.new
x = Hash.new
p = self.query("SELECT * FROM `posts` WHERE `id` = '#{id}' OR `post_profile` = '#{profile}' OR `post_owner` = '#{owner}'")
p.each do |i|
x[:post] = i
x[:comments] = self.query("SELECT * FROM `comments` WHERE `post` = '#{i["id"]}'")
r.push(x)
end
return r
end
奇怪的是我可以在循环中使用 puts 语句,我会得到各个帖子
前任:
r.push(x)
puts x
但是数组 (r) 只是一遍又一遍地包含相同的数据。对不起,这么长的帖子,我只是想彻底。