我读了这篇关于Using Polymorphism to Make a Better Activity Feed in Rails的有趣文章。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
随着create_activities定义为
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查询问题。
为了能够使用分页,解决这个问题的正确方法是什么?
什么'guests'和'tags'?请提供相关的代码 – xlembouras
@xlembouras完成,但我敢肯定你已经猜到了他们是什么 – Nycen
是我看不到的是事件,图像,客人和标记是如何连接到'活动' – xlembouras