如我们所知,范围在调用时开始加载。所以这个表达
articles = Article.published
articles.newest
获得2个查询。是的,我们可以这样做
articles = Article.published.newest
但如果我需要条件怎么办?如果foo == bar比继续链。
答案 0 :(得分:9)
你错了。在您的示例中,两行:
articles = Article.published
articles.newest
这不会生成两个查询。您能够继续链接的原因是这些调用将返回ActiveRecord::Relation
,它只会执行遍历查询或少数其他方法调用,如count,sum或其他聚合方法。
如果您从控制台查看此内容,则会显示每行都在生成查询。这是因为在控制台中,每次评估后都会调用一个隐式inspect
调用,这将生成一个查询。
答案 1 :(得分:0)
同桌的条件?
@a = Article.where("published = true AND foo = bar").order("publishing_date desc").limit(1)
如果您需要预先加载多个表格,请使用includes(...)
方法。
答案 2 :(得分:0)
你可以这样做:
articles = foo == bar ? Article.published.newest : Article.published