簡體   English   中英

has_many_association多個查詢使其變慢

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

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