読者です 読者をやめる 読者になる 読者になる

国境の南

Ruby, Railsメイン

joinの際に任意のキー「同士」で結合したい時には、primary_keyとforeign_keyを使う

Rails - joinの際に任意のキー「同士」で結合したい時には、primary_keyとforeign_keyを使う - Qiita にも投稿しました。 意外と知らなかったです。

下のようなテーブルとモデルがあったとする

articles

- id
- title
- content

article_plots

- id
- article_id
- plot_content

article_histories

- id
- article_id
- article_state

article.rb

  has_many :article_histories
  has_many :article_plots

article_plots.rb

  has_many :article_histories, foreign_key: :article_id, primary_key: :article_id

article_history.rb

  belongs_to :article

この時article_plotsとarticle_historyをAR経由でarticle_idを結合キーとしてjoinするには

article_plots.rb

  has_many :article_histories, foreign_key: :article_id, primary_key: :article_id

こういうふうに設定を足せば互いのarticle_idを見てjoinしてくれる

foreign_keyは自身の何を外部キーとするか、primary_keyは、相手の何を外部キーとするかを設定している。

下みたいなことをする必要はない...

joins('INNER JOIN article_histories ON article_histories.article_id = article_plots.article_id')