[英]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.