我有下表lead_states
它包含以下列:id
,lead_id
,state
,note
,created_at
state
是枚举列表中的字符串,例如new
,opened
,sold
或lost
。
每当引线改变状态时,都会添加一个新的状态行。
我希望找到特定州的潜在客户。潜在客户的当前状态是该潜在客户的最新lead_state。
所以我基本上希望最终得到像这样的范围:
Lead.in_state('opened')
我已经尝试了该范围的以下实现:
def in_state(state)
lead_state_scope = LeadState.where(state: state)
Lead.where(id: lead_state_scope.select(:lead_id))
end
但是,这将返回所有在其生命周期中某个时刻处于查询状态的线索。
答案 0 :(得分:0)
我会让你打破这个,但是你想要在方法中,但这应该可以得到你所需要的。添加组并将方法添加到内部查询可以解决您的潜在客户生命周期问题,因为它获得了最新的潜在客户状态。
def in_state(state)
Lead.where(id: LeadState.where(state:state).group(:lead_id).having('created_at = MAX(created_at)').select(:lead_id))
end