Rails: includes with polymorphic association

前端 未结 6 675
暗喜
暗喜 2020-12-24 11:55

I read this interesting article about Using Polymorphism to Make a Better Activity Feed in Rails.

We end up with something like

class Activity < A         


        
6条回答
  •  庸人自扰
    2020-12-24 12:13

    After I read Eager-loading Polymorphic Relationships in Rails article I ended up with the following solution:

    class ActivitiesController < ApplicationController
      def index
        activities = current_user.activities.page(:page)
    
        @activities = Activities::PreloadForIndex.new(activities).run
      end
    end
    
    class Activities::PreloadForIndex
      def initialize(activities)
        @activities = activities
      end
    
      def run
        preload_for event(activities), subject: :guests
        preload_for image(activities), subject: :tags
        activities
      end
    
      private
    
      def preload_for(activities, associations)
        ActiveRecord::Associations::Preloader.new.preload(activities, associations)
      end
    
      def event(activities)
        activities.select &:event?
      end
    
      def image(activities)
        activities.select &:image?
      end
    end
    

提交回复
热议问题