正如我們所知,範圍在調用時開始加載。所以這個表達式Rails中的懶惰範圍
articles = Article.published
articles.newest
得到2個查詢。是的,我們可以這樣做
articles = Article.published.newest
但是如果我需要條件呢?如果foo ==欄比繼續鏈。
正如我們所知,範圍在調用時開始加載。所以這個表達式Rails中的懶惰範圍
articles = Article.published
articles.newest
得到2個查詢。是的,我們可以這樣做
articles = Article.published.newest
但是如果我需要條件呢?如果foo ==欄比繼續鏈。
你是不正確的。在你的例子中,兩行:
articles = Article.published
articles.newest
這不會產生兩個查詢。你能夠繼續鏈接的原因是這些調用將返回一個ActiveRecord::Relation
,它只會在遍歷或選擇少數其他方法調用(如count,sum或其他聚合方法)上執行查詢。
如果您在控制檯中查看此內容,則會顯示每行都會生成查詢。這是因爲在控制檯中,每次評估後都會調用隱含的inspect
調用,這將生成查詢。
鏈接到文檔或來源證實此索賠將是有用的。 – Epigene 2017-10-03 12:23:49
同一個表中的條件?
@a = Article.where("published = true AND foo = bar").order("publishing_date desc").limit(1)
如果您需要使用多個表進行急切加載,請使用includes(...)
方法。
我們可以看到您的文章模型嗎?一般而言,在您嘗試遍歷結果或某些其他方法調用(如count)之前,不應執行查詢。 – 2013-03-02 13:55:12
Artcile是抽象的。查詢應該是,但不是範圍。 – Meliborn 2013-03-02 13:57:20
作用域是相同的。他們不會立即執行。 – 2013-03-02 13:58:33