0

Client、Deal、および DealType モデルがあります。クライアントには多くの取引があります。取引は DealType に属します。DealType にはプロパティがあります — クロージング。成約していないすべてのクライアントを選択する必要があります。

のようなものですscope :active, -> { where('deals.last.deal_type.closing = ?', false) }(もちろん、それは正しくありません)。

Rails 4で最善の方法でそれを行うにはどうすればよいですか?

ps。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 に答える