2012-09-26 64 views
1

我有复杂的查询,我想要自己连接做额外的计算。在SQL我可以做Rails内部连接两个sql语句获取ActiveRecord ::关系

SELECT t1.*, t2.* 
FROM (SQL) AS t1 
INNER JOIN 
(SQL) AS t2 
ON t1.num = t2.num - 1 

假设SQL是我想加入的查询。

如何使用ActiveRecord/arel(或别的东西)在rails中得到ActiveRecord :: Relation并能够使用where()。

如果我使用sql并执行/ select_all,则得到PG:result或hash,并且不能再使用memthod。

回答

3

首先溶液使用to_sql方法内插其他查询:

Place.select("places.*, communes.*").joins("INNER JOIN (#{ 
    Commune.where(:id => [1,2,3]).to_sql 
}) as communes ON communes.id = places.commune_id") 

第二种解决方案是使用阿雷尔的merge方法:

Place.select("places.*, communes.*") 
    .joins(:commune) 
    .merge(Commune.where(:id => [1,2,3]))