Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有多个联接和记录查找的Rails作用域_Sql_Ruby On Rails_Scope_Ruby On Rails 4 - Fatal编程技术网

Sql 具有多个联接和记录查找的Rails作用域

Sql 具有多个联接和记录查找的Rails作用域,sql,ruby-on-rails,scope,ruby-on-rails-4,Sql,Ruby On Rails,Scope,Ruby On Rails 4,我有客户、交易和交易类型模型。 客户有很多交易。Deal属于DealType。DealType具有属性-正在关闭。 我需要选择所有尚未完成交易的客户 类似于scope:active、>{where'deals.last.deal_type.closing=?',false}这当然是不正确的 如何在Rails 4中以最佳方式完成此任务 ps.如果您能链接到了解rails sql查询的源代码,将不胜感激。试试看 joins(deals: :deal_type).where('deal_types.c

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

类似于scope:active、>{where'deals.last.deal_type.closing=?',false}这当然是不正确的

如何在Rails 4中以最佳方式完成此任务

ps.如果您能链接到了解rails sql查询的源代码,将不胜感激。

试试看

joins(deals: :deal_type).where('deal_types.closing = ?', false)
一本好书:

特别是:


如果您不介意在原始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;

谢谢这几乎是我想要的,但我只需要检查最后一个客户的id或日期:啊,你的要求和我的类似。我是用SQL完成的,但还没有找到ActiveRecord的方法。我的问题是:添加到@jcm。我找不到完整的活动记录解决方案。但是我们可以这样做:scope::active、>{joinsdels::deal\u type.joinsiner加入选择deals.client\u id,MAXdeals.created\u at AS latest\u deals\u date FROM deals GROUP BY deals.client\u id latest\u deals ON deals.client\u id=latest\u deals.client\u id AND deals.created\u at>=latest\u deals\u deals\u date.where'deals'deals\u type.closing=?,false}@是的,看起来内部查询确实需要在SQL中完成。