【问题标题】:complex arel query复杂的arel查询
【发布时间】:2010-09-15 02:13:02
【问题描述】:

我有一个模型,其中一篇文章可以有多个标签(一个标签可以有多个文章)。文章有两个子类,产品和套件。产品有类别,套件没有。

如何获取某个标签(我知道 tag.id)的所有文章(包括套件和产品),并加载产品的类别(避免 n+1)?

【问题讨论】:

    标签: ruby-on-rails activerecord arel


    【解决方案1】:

    假设您的关联已经建立(即标签 has_many :articles 到 article_tags 等),如果您使用的是 Rails 3,则可以在查找时使用 #includes。将您的 belongs_to :category 移动到您的 Article 类(是的,这样做在语义上是可以的),然后:

    @tag = Tag.first
    @tag.articles.includes(:category)
    

    应该可以。

    http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

    【讨论】:

    • 不幸的是,它没有。未找到名为“类别”的关联;也许你拼错了?文章没有类别,只有产品有。
    • 啊,我明白了,您首先将类别放在文章中,但这在语义上是正确的,但不是领域明智的。套件由多篇文章组成,而这些文章又可以有不同的类别。
    • 我最后做的是预取所有类别(它们很少),然后让一级缓存处理 n+1。工作没有问题。也许不是最好的做法,但似乎表现不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多