ume

rails6 has_manyのオプション( foreign_key)の意味と使い方

結論

外部キーを好きな名前で設定するためのオプション.

外部キーってなに?って方は以下を参照してください。

www.sejuku.net

外部キーはどのように名前が決まるの?

(参照先の)モデル名の小文字_idになる ↓の場合

通常は、外部キー制約のカラム名を「user_id」の様に「参照先のモデル名(小文字) 」+ 「_id」の形式になり外部キーだと認識されます。

参照先のモデル名(小文字)=Userテーブル.

user = User.find(1)
user.blogs

これだと宮崎さんのID(1)と合致するuser_id(1)をBlogから全て取得する。要はblogsテーブルのid=1(rubyとは?)の記事を書いた人が宮嶋さんというデータしか取得する事が出来ません。

外部キーをどんなときに好きな名前で設定するの?

⇨同じテーブル(User)の外部キー(user_id)を複数参照下のテーブルに含めるとき。 外部キー1と2はuser_idと置き換えて考えてください。外部キー1はブログを書いた人のuser_idが入り外部キー2にはレビューをするuser_idが入るとする。 例えば「高橋さんがレビューした宮崎さんのタイトル」のデータを取得したい際 外部キー1(user_id)と外部キー2(user_id)だとどっちがブログを書いた人のidでレビューをする人のidかわからない。 そこでUserテーブルとBlogテーブルの間でしっかり「外部キー1はブログを書いた人のid」が入り「外部キー2はレビューをしたid」が入ることを伝えないといけない

class Blog < ActiveRecord::Base
    belongs_to :writer, class_name: 'User', foreign_key: 'writer_id' #追加
    belongs_to :reviewer, class_name: 'User', foreign_key: 'reviewer_id' #追加
end

参考情報

https://pikawaka.com/rails/association