我有一个活动供稿,我想热切地加载所有存在的活动。
每个活动都有一个actor,它是多态的。假设可以有用户或组作为参与者。
然后我有一个UserActivity表来知道哪些活动被复制到哪个用户。
现在,对于活动供稿,我想急切加载每个活动的参与者的所有用户和组。
我一直在阅读,我知道它会生成多个SQL条件,因为有一个多态关联来做include。我现在的判决是:
@activities = Activity.find(:all, :order=>"activities.updated_at DESC", :conditions => ['user_activities.user_id=?', @user.id], :include=> [:user_activities, :actor])
但是,这会引发错误:
“无法急切加载多态关联:actor”
我尝试了同样的方法,但没有条件且确实有效,只为参与活动的参与者生成SQL查询。 (下一句话确实有效)
@activities = Activity.find(:all, :order=>"activities.updated_at DESC", :include=> [ :user_activities, :actor])
但当然,这不是我想做的事情,因为我想要有条件,但我没有看到让它发挥作用的方法。我已尝试使用where而不是condition选项但它不起作用,我使用了包含而不是因为我读到了:包含已被弃用为Rails 3。
这对应用程序非常重要,因为它是活动源,因此您可以想象它会产生大量流量。
每次重新加载Feed以获取活动中的所有用户和组时,我都不想进行查询,因为如果一次显示的所有活动都没有一种类型的actor ,我会做一个我可以保存的SQL查询。