我的朋友帮我做了一些清理 - 但它看起来并不像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
答案 0 :(得分:1)
我会这样:
@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。