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

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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

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')