Rails内部连接两个sql语句来获取ActiveRecord :: Relation

时间:2012-09-26 14:04:06

标签: ruby-on-rails activerecord arel

我有复杂的查询,我想加入自己进行额外的计算。在sql我可以做

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:结果或哈希,并且不能再使用memthod。

1 个答案:

答案 0 :(得分: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")

第二种解决方案是使用Arel的merge方法:

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