#本記事の目的
Rails(API)+Reactで開発をしているとき、投稿にユーザーネームの添付に手こずったので、
今回はPost(投稿)コントローラのindexにおいてUser情報も加え、必要なものを返却する方法を調べたのでまとめておきます。
##必要な情報を結合して返却したい
app/controller/post_controller.rb
class PostsController < ApplicationController
def index
posts = User.joins(:posts).select('posts.id, title, body, name AS user')
render json: { data: posts }
end
end
##joinsメソッドとselectメソッド
###joinメソッド
joinsメソッドは2つのテーブルを内部結合することができるメソッドです。
User.joins(:posts)
joinsメソッドを使って、usersテーブルとpostsテーブルを内部結合させます。
###selectメソッド
内部結合させたあとに、selectメソッドを使って、必要なカラムを指定して取得します。
.select('posts.id, title, body, name AS user')
-
ここでposts.idとなっているのは、テーブル同士でカラム名が重複している場合、テーブルを指定してidを取得しています。titleやbodyなどの重複していないカラムはそのまま指定することができます。
-
name AS userとしているのは、usersテーブルのnameカラム名を表示用にuserと変更しています。postsテーブルのカラムと一緒に返却しているためnameだと分かりづらいためuserに変更しています。