Ruby と Sinatra を使用して REST API を設計しています。私が抱えている問題は 1 つだけです。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) には同じデータが何度も含まれているだけです。このような長い投稿で申し訳ありません。徹底したかっただけです。