使用Arel表达CTE



我有这个ActivereCord的片段:

scope = Listing.where(Listing.arel_table[:price].gt(6_000_000))

生成的SQL:

SELECT listings.* FROM listings where listings.price > 6000000

我想添加一个会导致此SQL的CTE:

WITH lookup AS (
    SELECT the_geom FROM lookup WHERE slug = 'foo-bar'
)
SELECT * from listings, lookup
WHERE listings.price > 6000000
AND ST_within(listings.the_geom, lookup.the_geom)

我想使用 AREL ActivereCord

我也想将 scope 变量用作起点。

您可以创建CTE,例如:

lookup = Arel::Table.new(:lookup) # Lookup.arel_table
cte = Arel::Nodes::As.new(lookup,
  lookup.where(lookup[:slug].eq('foo-bar')).project('the_geom'))

然后将其与您的范围一起使用:

scope.with(cte)

您可以在Arel Readme中看到一个示例,在底部

相关内容

  • 没有找到相关文章

最新更新