Railsで複数テーブルのjsonデータを一度に返したい。
Railsのrender jsonを用いて、複数テーブルのjsonデータを返す方法。
調べてもぱっと出てこなかったので、一応メモとしておく。
(そもそも常識なのかもしれない)
そのため、あくまで個人的な備忘録の意味が強い。
最近RailsでAPIを作っているのだが、"render json"で複数の関連テーブルを
1つのjsonとして返したかったので、そのやり方をメモ。
"posts"というテーブルに関連する"comments"と"images"データも一緒に返したいときは、
下記のようにrenderメソッドに記載する。
("@posts"にはpostsデータが入っているものとする。
respond_to do |f| f.json { render json: @posts.to_json(:include => [:comments, :images]) } end
また、関連しないテーブルの情報を"render json"で一度に返すときは下記のようにした。
respond_to do |f| f.json { render json: [@posts.to_json(:include => [:comments, :images]), [user: @user.to_json]] } end # または respond_to do |f| f.json { render json: [posts: @posts.to_json(:include => [:comments, :images]), user: @user.to_json] } end
これで希望する情報をjson形式で返せる。
のだけど、あまりこういうやり方が検索情報で出てこなかったので、
rails的にありなのかはいまいち自信が持てない。
※一応、このポストを行う前に同じケースを今一度探してみたが、
たぶんこのstack overflowの記事が該当する気がする。