0
假設我有書籍,每本書都屬於作者。我想打印一份書籍清單以及一些相關的作者信息。我想,作爲初始通,只需使用渴望加載相關記錄,同時加入Rails
@books = Book.all
以我控制器和
book.author.name
我認爲,導致@books.count
單獨的查詢(即 「N + 1」 的問題)。推薦的解決方案是:
@books = Books.includes(:author)
將其減少爲一個固定數量的查詢。現在
,如果我需要過濾基於具有與筆者做了一些標準的書單,我會做的控制器
@books = Books.joins(:author).where('name like "%Richler%"')
但這再次引入了「N + 1」的問題。如果我試圖在查詢中適應.includes(:author)
,它會嘗試將其拉入兩次,並且name
變得模糊不清。在常規的MySQL,我只想用這樣的:
SELECT * FROM books LEFT OUTER JOIN authors ON books.author_id = authors.id
WHERE authors.name LIKE "%Richler%";
或
SELECT * FROM books, authors WHERE
authors.name LIKE "%Richler%" AND books.author_id = authors.id;
但短期寫的只是一個SQL查詢字符串,有什麼Railsish的方式來做到這一點?
米蘭的榜樣作品;我想你只需要指定名稱表以避免歧義。 – 2010-12-22 16:26:45