0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsのjoinsメソッドについて(SQL練習②)

Posted at

背景

  • Railsで検索フォームを作っています
  • お手本のコードに読み慣れないメソッドがいっぱい&SQL自体慣れていないので、勉強しながらノートにまとめてみました

▼環境

  • Rails 5.2.3
  • Ruby 2.6.0

なお、このメソッドについては下記の記事が大変丁寧に紹介してくれています。本記事はこちらの記事の自分なりの焼き直しです。

【Rails】joinsメソッドのテーブル結合からネストまでの解説書

joinsメソッドについて

SQLのINNER JOINを実現するメソッドです。
INNER JOINとは、ある2つのテーブルについてAかつBの部分を取り出すSQL文です。

基本の構文はこちらです。

> User.joins(:posts)
SELECT `users`.*
FROM `users`
INNER JOIN `posts`                      /* 結合先のテーブル */
ON `posts`.`user_id` = `users`.`id`     /* 結合の条件 */

この時、

  • postsがないuser
  • userがないposr

のデータは取り出されません。
発行されるSQLが複雑なのでびっくりしますが、結構シンプルなメソッドですね:relaxed:

1点、注意したほうが良いなと思ったのは、User.joins(:posts):postsの部分は、テーブル名ではなく、関連名だということでしょうか...?

例えば、以前こんなアソシエーションを組みましたが、

class User < ApplicationRecord
  has_many :like_posts, through: :likes, source: :post
end

この場合は、User.joins(:like_posts)のように書く必要があるようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?