Я разрабатываю API REST с Ruby и Sinatra. Только одна проблема, с которой я сталкиваюсь: Я пытаюсь выполнить итерацию по массиву сообщений, выбранных из MySQL. ФорматRuby array.each Возвращая ту же ценность каждый раз
[{:post => "Hello, world!", :comments => [{:author => "user1", :content => "Goodbye, world!"}]}, ...]
Итак, это массив хеша с постом контента и комментариями, а ключ комментариев есть еще один массив и хэш (ы), содержащий автор и содержание комментария.
У меня есть следующий код, потянув массив сообщений из MySQL (возвращенный в массив с хэшами в нем), а затем повторяя эти хэши. Для каждого хэша в массиве он получает идентификатор сообщения и запросы 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
Странно то, что я могу использовать помещает заявление в петлю, и я буду получать отдельные сообщения
Ex:
r.push(x)
puts x
Но массив (г) просто содержит одни и те же данные снова и снова. Извините за такой длинный пост, я просто хотел быть основательным.
Хорошо, я попробовал это. В нем перечислены только сообщения в отдельных хешах. Нет комментариев. –
Вы уверены, что используете 'map', а не' each'? –
Другими словами, возвращается то же самое, что и db.query. –