我有 Client、Deal 和 DealType 模型。客户有很多交易。交易属于 DealType。DealType 有属性——关闭。我需要选择所有尚未完成交易的客户。
类似的东西scope :active, -> { where('deals.last.deal_type.closing = ?', false) }
(当然,这是不正确的)。
我怎样才能在 Rails 4 中以最好的方式做到这一点?
附言。将不胜感激来源链接,以了解使用 rails 的 sql 查询。
我有 Client、Deal 和 DealType 模型。客户有很多交易。交易属于 DealType。DealType 有属性——关闭。我需要选择所有尚未完成交易的客户。
类似的东西scope :active, -> { where('deals.last.deal_type.closing = ?', false) }
(当然,这是不正确的)。
我怎样才能在 Rails 4 中以最好的方式做到这一点?
附言。将不胜感激来源链接,以了解使用 rails 的 sql 查询。
如果您不介意在原始 SQL 中执行此操作,请尝试:
SELECT clients.*,deals.* FROM clients INNER JOIN deals ON clients.id=deals.client_id
INNER JOIN
(
SELECT deals.client_id, MAX(deals.created_at) AS latest_deals_date
FROM deals
GROUP BY deals.client_id
) latest_deals
ON (deals.client_id=latest_deals.client_id AND deals.created_at>=latest_deals.latest_deals_date)
INNER JOIN deal_types ON deals.deal_type_id=deal_types.id
WHERE deal_types.closing=false;