Ruby on rails Rails:执行有限的Includes和复杂的分组w/范围

Ruby on rails Rails:执行有限的Includes和复杂的分组w/范围,ruby-on-rails,scope,group-by,Ruby On Rails,Scope,Group By,以下是我的基本模型层次结构: Movie has many Listings and many Links through Listings Listing has many Links Link has a price (float) 我正在尝试获取所有具有price=0.00链接的电影 我可以很容易地通过作用域实现这一点: scope :free, lambda{ joins(:links).where('links.price = ?', 0.00) .group(

以下是我的基本模型层次结构:

Movie has many Listings and many Links through Listings
Listing has many Links
Link has a price (float)
我正在尝试获取所有具有price=0.00链接的电影

我可以很容易地通过作用域实现这一点:

scope :free, lambda{ 
     joins(:links).where('links.price = ?', 0.00)
     .group('movies.id')
}
这很好,为我提供了一个有免费链接的电影列表,但当我浏览并实际查看
Movie.links
时,它提供了所有链接,而不仅仅是免费链接。这是第一个问题

问题二是,当我在数据库中获取电影的几个关系的列表时,我需要高效地预取它们。为此,我使用
includes()
如下所示:

default_scope includes( 
    :formats, 
    :critic_ratings => [
        :network
    ], 
    :covers => [
        :network
    ], 
    :listings => [
        :links, :network
    ]
)
这也可以工作,但它与先前的自由范围不兼容。也就是说,它将抓住电影的所有属性,而不仅仅是免费的属性,我不知道如何在复杂的嵌套include语句中对一个项规定任何限制,就像这样。我希望能够只预取链接
where('price=?',0.00)
。按照我现在的工作方式,我使用这个
默认范围
抓取所有列表和链接,然后运行一个单独的
.free
范围,我为呈现页面的一个部分中的列表建立了这个范围。但当我这样做时,查询会返回到db,我认为这比我用自己的琐碎检查在内存中手动过滤预取结果要慢得多

总之:

问题一:正确分组或设置我的作用域,以便Movie.links仅向我提供免费链接,而不强迫我返回db(即,我知道我可以执行Movie.links.free,其中free是为Link定义的作用域,但据我所知,这将返回db)。如果没有使用作用域和分组来解决问题1的内置解决方案,我可以实现一个助手,在内存中进行后期排序来解决这个问题,尽管这会给复杂的情况带来一些麻烦

问题二:我希望我的作用域根据我规定的条件只预取一组选定的列表、链接等。如果我们不能解决问题1,那么问题2可能就没有解决方案,因为我无法知道哪些链接已经预取,我将不得不重新扫描它们以找到免费链接,除非Movie.links只提供免费链接(Movie.where()会返回到db吗?)

希望这不会太令人困惑。谢谢你的帮助