2011-05-08 34 views
6

所有的例子:加載的加載都是用於類級別的查詢。我在我的模型實例上試過了,它仍然發佈了一堆查詢 - 它是否適用於實例方法?是否:包含ActiveRecord實例上的工作?

#in controller 
@emails = person.sent_emails(:include => [:recipient]) 

#in view 
render @emails 

# _email.html.erb partial 
<h1><%= email.recipient.name %></h1> 
<p> 
<%= email.content %> 
</p> 

#still issues a select * for emails, N+1 for recipients :/ 
+2

什麼是局部'_email'裏面? – 2011-05-08 20:52:02

+0

將其添加到問題 – 2011-05-08 20:54:50

+2

如果收件人不是急於加載,那麼'email.recipient'調用應該運行'select * from users'。你確定你看到多次從電子郵件中選擇*嗎? – 2011-05-08 20:58:22

回答

3

它看起來有點Rails 2ish我知道,可能有更好的Rails 3的方式,但這是行不通的。

@emails = person.sent_emails.find(:all, :include => :recipient) 

編輯:見BaroqueBobcat評論了較好的方法對Rails 3

+3

您可以使用'sent_emails.all(:include =>:recipient)' – BaroqueBobcat 2011-05-08 21:14:59

+0

使用BaroqueBobcat的語法 - 這就是我所缺少的。謝謝 – 2011-05-08 21:16:44

+0

好的,所以在這個例子中我有一個Person實例。我可以做「person.sent_emails.all(:include =>:收件人)」。 它返回我預期的結果。但是person.sent_emails變量不變。我如何在ActiveRecord實例內部加載這些關聯? – ancajic 2014-05-04 11:30:56

相關問題