何をしたのか
今までpolymorphicについてなんとなくで使っていたので、理解を深める目的でpolymorphicを触れました。
今回の使用例
今回は下記の図のmodelを使います。
Comic(漫画)
とNovel(小説)
がそれぞれAuthor(著者)
という子モデルを持っているという状態です。
それぞれのモデルのコードは下記のようになっています。
author.rb
class Author < ApplicationRecord
belongs_to :bookable, polymorphic: true
end
comic.rb
class Comic < ApplicationRecord
has_many :authors, as: :bookable
end
novel.rb
class Novel < ApplicationRecord
has_many :authors, as: :bookable
end
Authorから親モデルを取得したいときは下記のようなコードで取得できます。
Author.find(1).comic.title
Author.find(3).novel.title
↓
# 両方ともbookableで取得できます。
Author.find(1).bookable.title
# => ワンピース
Author.find(3).bookable.title
# => 白夜行
ここでpolymorphicが便利なのはAuthorの親モデルがComicかNovelかを気にせずbookable
で取得できるところにあると思います。
参考