3
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 1 year has passed since last update.

【Rails】カラム名と異なるアソシエーションを設定する(belongs_to等のforeign_keyオプション)

Posted at

はじめに

STIであるモデルが絡んだ場合など、たまにタイトルのようにカラム名と異なるアソシエーションを設定したくなる場合がある。その方法について記録する。

結論

例えば、ユーザ(User)一人一人に対し、複数の著書(Book)が属しているような場合に、その著書(Book)から、ユーザ(User)を取得する関連を「author(著者)」としたい場合には、

class User < ApplicationRecord
  has_many :books
end
class Book < ApplicationRecord
  belongs_to :author, class_name: "User", foreign_key: "user_id"
end

と、foreign_key: "user_id"でカラム名を指定する。

詳細

foreign_keyでカラム名を指定しない場合、デフォルトではアソシエーション名に_idが追加されたカラムが参照される。
今回の例だと、Bookテーブルのauthor_idカラムをRailsは参照するが、実際にあるのは、user_idカラムなのでエラーとなる。
foreign_keyオプションを使い、BookテーブルでUserテーブルの外部キーとなっているuser_idを明示的に指定することで解決する。

おわりに

アソシエーションはオプションが色々あり、都度詳細は調べているような形になってしまっているので、調べずに済むよう理解を深めていきたい。

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