Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:与作用域中可跟踪的_类型的即时加载关联_Ruby On Rails_Scope_Associations_Eager Loading - Fatal编程技术网

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
...
结束

假设所有模型都有父模型,您的想法很好,但如果有一些模型没有父模型,该怎么办?我将更新我的问题。很高兴您能够找到适合您的用例的解决方案!谢谢另外,我相信这是一个更好的解决方案,更少的代码和更大的灵活性;)