0

我有 Client、Deal 和 DealType 模型。客户有很多交易。交易属于 DealType。DealType 有属性——关闭。我需要选择所有尚未完成交易的客户。

类似的东西scope :active, -> { where('deals.last.deal_type.closing = ?', false) }(当然,这是不正确的)。

我怎样才能在 Rails 4 中以最好的方式做到这一点?

附言。将不胜感激来源链接,以了解使用 rails 的 sql 查询。

4

2 回答 2

1

尝试

joins(deals: :deal_type).where('deal_types.closing = ?', false)

好读:

ActiveRecord 查询接口

尤其是:

连接表

于 2013-11-02T15:38:40.560 回答
-1

如果您不介意在原始 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;
于 2013-11-03T10:51:29.123 回答