[英]has_many_association multiple queries making it slow
我有has_many_association表。 例如,用戶has_many訂閱。 在活動管理員的索引頁面上,我顯示了多個計算的字段,我需要為其調用user.subscriptions.last。 由於我多次打電話。 因此,由於這個原因,我們的服務器正變得超載。 它在索引頁面上被處理,因為那里僅顯示30個條目。 但是,在導出為CSV時,由於多個查詢,我們的服務器過載了。 我正在為一個用戶使用大約15個查詢。
這里的問題是我必須檢查打印其代碼的有效訂閱。 我也不能將查詢放在scoped_collection中,因為它只會加載有效訂閱的用戶數據。 那么如何解決這個問題呢?
def scoped_collection
end_of_association_chain.includes(:subscriptions, :blogs)
end
index do
column :email
column "referrer" do |user|
subscription = user.subscriptions.valid.first
subscription.referrers.first.code if subscription
end
column "blog_id" do |user|
user.blog.id if user.blog
end
end
用戶has_many訂閱和has_many訂閱者是我想要的第一個推薦人代碼
將此行添加到您的users.rb文件
controller do
def scoped_collection
# Method 1
super.includes(subscriptions: :referrers) # prevents N+1 queries to your database
# method 2
User.includes(subscriptions: :referrers).select("users.*, (SELECT referrers.code from referrers LIMIT 1) as refer_code")
end
end
在您的控制器調用@subscriptions = current_user.subscriptions
然后在您的視圖中視需要調用@subscriptions.last
,並且視圖中不會調用新查詢,因為記錄已被加載到控制器中。
檢索所有字段:
controller do
def scoped_collection
Model.all.as_json(include: [:subscriptions,:referrers])
# prevents N+1 queries to your database
end
end
檢索一些字段,例如:
controller do
def scoped_collection
Model.all.as_json(include: [:subscriptions => {only: :field1}])
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.