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