Rails Activerecord Relation:使用子查询作为SQL select语句的表

有人可以帮我弄清楚如何使用Rails编写以下SQL(我使用的是Rails 4)Activerecord方法? 我知道你可以用find_by_sql做到这一点,但我想保留活动记录关系。 这是我正在尝试创建的postGreSQL数据库的sql:

SELECT * FROM (SELECT DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.id, table_b.time FROM table_1 LEFT OUTER JOIN table_b ON table_a.id = table_b.id ORDER BY table_a.id, table_b.time asc) AS subquery ORDER BY alias_a asc 

对于我的子查询,我有以下内容(生成上面子查询的sql):

 @subquery = table_a.select("DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time") @subquery = @subquery.joins("LEFT OUTER JOIN table_b ON table_a.id = table_b.id") @subquery = @subquery.order("table_a.id, table_b.time asc") 

但是,我无法弄清楚如何编写一个使用@subquery作为外部select语句的表的select语句。

使用Active Record接口中的from()方法。

例如:

 @subquery = table_a.select("DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time") @subquery = @subquery.joins("LEFT OUTER JOIN table_b ON table_a.id = table_b.id") @subquery = @subquery.order("table_a.id, table_b.time asc") 

然后在外部查询中使用它:

 @query = OtherModel.from("(#{@subquery.to_sql}) table_name, other_model_table, etc ...").where(:field => table_name.alias_a) ...etc.