Polymorphicしたモデルをincludesするのは簡単ですが、
その先のモデルをincludesしたいことってありますよね。
そんな時はこう書けば実現できます。
1 2 3 4 5 6 |
class Human belongs_to :humanable, polymorphic: true belongs_to :man, ->{ joins(:humans).where(humans: { id: Human.where(humanable_type: "man") }) }, foreign_key: :humanable_id belongs_to :woman, ->{ joins(:humans).where(humans: { id: Human.where(humanable_type: "Woman") }) }, foreign_key: :humanable_id end |
自己結合するとできるようになります。
使用する時は
1 |
Human.includes(man: :man_model_relation) |
とすることでPolymorphicで使用されるモデルのリレーションを使用できるようになります。
参考
スポンサードリンク