本記事について
学んだことを日々アウトプットしていますよ、シリーズです。
joins
joinsはテーブル同士を内部結合して検索するためのメソッド
内部結合とは、各テーブル同士で関連づけられたidが一致しているものだけを使って新しいテーブルを作ること
なので、idが一致しないものは切り捨てられる
userが複数のpostもつような関係が設定されている場合は
User.joins(:posts)
を実行すると
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id"
というSQLが走り、idが一致しているカラムだけが取り出されて、そのほかは切り捨てられる
select
joinsでselectメソッドを使うことによって、特定のカラムを選択して表示できる
select(テーブル名.カラム名)で、特定のカラムだけを選んで表示できる
User.joins(:posts).select("users.name")
SELECT users.name FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id"
where
joinsとwhere句を組み合わせることによって、内部結合した後に条件を指定してデータ取り出せる
User.joins(:posts).where(posts: { month: 8 })
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE "posts"."month" = ? [["month", 8]]
参考文献