4
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?

今年の振り返りAdvent Calendar 2023

Day 24

勉強会での小話6

Last updated at Posted at 2023-12-24

はじめに

この記事は2023年度の振り返りです。

こちらの続きとなります。

問題を解いてる時の実話を元に、作成しております

勉強会内の小話

講師:よし、最後のリレーションの問題だ!
講師:「アイシールド21」と同じ作者が書いた作品全てを返すリレーションを作ってみよ!

初学者達:はい!

初学者達:これでどうでしょう!

class Comic < ApplicationRecord
  has_many :kaku, foreign_key: 'book_id', class_name: 'Write'
  has_many :kaita_hito, through: :kaku, source: :hito
  has_many :onaji_sakusya, through: :kaita_hito, source: :kaita_manga
end
class Write < ApplicationRecord
  belongs_to :hito, foreign_key: 'user_id', class_name: 'Author'
  belongs_to :manga, foreign_key: 'book_id', class_name: 'Comic'
end
class Author < ApplicationRecord
  has_many :kaita, foreign_key: 'user_id', class_name: 'Write'
  has_many :kaita_manga, through: :kaita, source: :manga
end

講師:お?じゃぁ、確認してみよう

comic = Comic.find_by(name: 'アイシールド21')
comic.onaji_sakusya
SELECT `comics`.* 
FROM `comics` 
INNER JOIN `writes` ON `comics`.`id` = `writes`.`book_id` 
INNER JOIN `authors` ON `writes`.`user_id` = `authors`.`id` 
INNER JOIN `writes` `kakus_onaji_sakusya` ON `authors`.`id` = `kakus_onaji_sakusya`.`user_id` 
WHERE `kakus_onaji_sakusya`.`book_id` = 3
=> 
[#<Comic:0x00007f185bb75280
  id: 3,
  name: "アイシールド21",
  created_at: Sat, 23 Dec 2023 02:56:25.513233000 UTC +00:00,
  updated_at: Sat, 23 Dec 2023 02:56:25.513233000 UTC +00:00>,
 #<Comic:0x00007f185bb75140
  id: 4,
  name: "ワンパンマン",
  created_at: Sat, 23 Dec 2023 02:56:25.520151000 UTC +00:00,
  updated_at: Sat, 23 Dec 2023 02:56:25.520151000 UTC +00:00>]

講師:お?素晴らしい!一発合格じゃないか!完璧にマスターしたんじゃないか?

初学者達:フローは微妙なんですよね。。。

講師:なるほど。フローにするとこんな感じだな

image.png

初学者達:余計わかんねーよ!!

講師:すまん。自分も書いててこんがらかってきた。ただ、事前にリレーションを書いておくことで、呼び出すときが楽になったりするので使うと思うリレーションは書いていた方が楽だぞ

初学者達:わかりました!

さいごに

無事に開催の雰囲気の記事がかけてよかったです。
最後までご拝読されていた方は、最後までお付き合い下さいましてありがとうございました。
こんな感じで日々勉強会を開催してたりします。
自分は初学者に対しては、ベストプラクティスを教えるより、多くの手段を学んで頂きたいと考えております。その上で、場面に応じたベストプラクティスを自分たちで模索して利用して言ってくれればと思っております。
少し上から目線になってしまいましたが、自分も日々精進が必要なので、今後も色々なものをアウトプットしていきたいと思います。

4
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
4
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?