Ruby on rails Rails:与作用域中可跟踪的_类型的即时加载关联
这很难 我有一个Ruby on rails Rails:与作用域中可跟踪的_类型的即时加载关联,ruby-on-rails,scope,associations,eager-loading,Ruby On Rails,Scope,Associations,Eager Loading,这很难 我有一个活动模型: 类活动{includes(:trackable)} ... 结束 因此,如果我这样做: @activities=Activity.include\u all 上面的代码运行得很好,但是如果我还想加载可跟踪记录的父项呢?这些模型也有不同的父模型: 答案型号: class-Answer{includes(:问题)} ... 结束 Post型号: class Post{includes(:blog)} ... 结束 类别型号: 类别{} ... 结束 请注意,每个
活动
模型:
类活动{includes(:trackable)}
...
结束
因此,如果我这样做:
@activities=Activity.include\u all
上面的代码运行得很好,但是如果我还想加载可跟踪记录的父项呢?这些模型也有不同的父模型:
答案
型号:
class-Answer{includes(:问题)}
...
结束
Post
型号:
class Post{includes(:blog)}
...
结束
类别
型号:
类别{}
...
结束
请注意,每个模型中的include\u all
范围显示了要包括的关联。我试过了
类活动{includes(trackable::question)}
...
结束
当出现可跟踪的类型的活动
时,此功能将中断
有什么想法吗
Rick的回答是一个很好的解释,但是,有没有办法在另一个范围内使用关联范围?这对于没有父类的关联来说非常方便,比如类别
差不多
scope:include_all,->{includes(可跟踪->{include_all}}
您可以在Answer
和Post
上定义一个额外的parent
关联,以扩展可跟踪的ducktype的界面:
class-Answer
class Post
类活动{includes(trackable::parent)}
...
结束
搞定了!如果将范围直接添加到所属_to
行,则关联将与该范围一起加载
类活动{include\u all},多态性:true
...
结束
假设所有模型都有父模型,您的想法很好,但如果有一些模型没有父模型,该怎么办?我将更新我的问题。很高兴您能够找到适合您的用例的解决方案!谢谢另外,我相信这是一个更好的解决方案,更少的代码和更大的灵活性;)