我读了这篇关于Using Polymorphism to Make a Better Activity Feed in Rails人的有趣文章.
我们最终会得到这样的结果
class Activity < ActiveRecord::Base
belongs_to :subject, polymorphic: true
end
现在,如果其中两个主题是:
class Event < ActiveRecord::Base
has_many :guests
after_create :create_activities
has_one :activity, as: :subject, dependent: :destroy
end
class Image < ActiveRecord::Base
has_many :tags
after_create :create_activities
has_one :activity, as: :subject, dependent: :destroy
end
创建_活动定义为
def create_activities
Activity.create(subject: self)
end
客人和标签的定义如下:
class Guest < ActiveRecord::Base
belongs_to :event
end
class Tag < ActiveRecord::Base
belongs_to :image
end
如果我们查询最近记录的20项活动,我们可以:
Activity.order(created_at: :desc).limit(20)
我们有一个可以解决的第一个N+1查询问题:
Activity.includes(:subject).order(created_at: :desc).limit(20)
但是,当我们呼叫来宾或标签时,我们还有另一个N+1查询问题.
What's the proper way to solve that in order to be able to use pagination ?