簡體   English   中英

Rails ActiveRecord-用於計數關聯記錄的清理

[英]Rails ActiveRecord - Cleanup for counting associated records

我的朋友幫助我進行了一些清理-但這看起來不太像Rails活動記錄方式。

首先,我這樣寫:

@count_users_approved = current_agent.users.map { |u| u.orders.where("created_at >= ? AND order_status_id = ?", DateTime.now.beginning_of_day, "3")}.count

#而不是計數記錄,結果以這種方式顯示:[0,0,1]

我的朋友以這種方式編寫它來修復它:

@count_users_approved = Order.where("created_at >= ? AND user_id IN (?) AND order_status_id = ?", DateTime.now.beginning_of_day, current_agent.users.map(&:id), 2).count

我們可以編寫這種更清潔的ActiveRocord類型嗎?

這就是我的模型的設計方式。

class Agent < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :agent
  has_many :orders
  has_many :support_histories
  has_one :card_info
end

class Order < ActiveRecord::Base
  belongs_to :user
  belongs_to :order_type
  belongs_to :order_status
end

我會這樣走:

@count_users_approved = Order.joins(:user).where("orders.created_at >= ?", DateTime.now.beginning_of_day).where(users: {agent_id: current_agent.id}, order_status_id: 2).count

您正在加入用戶表以測試該用戶已分配給當前代理。

另外,也不需要映射ID,您可以只傳遞current_agent.users數組,Rails在構建查詢時會為您提取對象的ID。

暫無
暫無

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

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