簡體   English   中英

有效地引用關聯的ActiveRecord模型的屬性(規則4)

[英]Referencing an associated ActiveRecord model's attributes efficiently (Rails 4)

假設我有一個用戶具有has_many帖子的帖子和用戶模型。 用戶模型具有name屬性。

說我要顯示每個User#name在后的查詢與類似對象Post.all.each {|post| puts post.user.name} Post.all.each {|post| puts post.user.name} 這可行,但是Rails對N個帖子的每一個發出數據庫查詢,以查找每個用戶的姓名,例如

SELECT  "users".* FROM "users"  WHERE "users"."id" = ? LIMIT 1  [["id", 25]]

有沒有一種方法可以告訴Rails它可以通過聯接來查找,而不是為每個實例發出單獨的查詢? 如果我嘗試使用Post.all.joins(:user).select('posts.*,users.name')類的標准聯接,則ActiveRecord :: Relation對象會適當返回,但在迭代過程中仍會產生新的查詢為該行中的每個帖子發布。

您可以嘗試:

Post.includes(:user)

這被稱為“預加載”,從性能角度來看,這僅應發出兩個數據庫查詢( 請在此處檢查文檔

當您需要在加載時應用條件時,文檔建議使用Joins代替(例如,名稱以's'開頭的用戶的帖子)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM