Sql 如何使用AREL命名计算布尔列?
我有一个SQL查询,我正试图转换为AREL。它开始于:Sql 如何使用AREL命名计算布尔列?,sql,ruby-on-rails,arel,Sql,Ruby On Rails,Arel,我有一个SQL查询,我正试图转换为AREL。它开始于: SELECT COUNT(id) > 0 AS exists... 到目前为止,我已经: Arel::Table.new(:products)[:id].count.gt(0).as(:exists) 但我得到: NoMethodError - undefined method `as' for #<Arel::Nodes::GreaterThan:0x007fc98c4c58d0> 有什么想法吗?这应该可以,给你0
SELECT COUNT(id) > 0 AS exists...
到目前为止,我已经:
Arel::Table.new(:products)[:id].count.gt(0).as(:exists)
但我得到:
NoMethodError - undefined method `as' for #<Arel::Nodes::GreaterThan:0x007fc98c4c58d0>
有什么想法吗?这应该可以,给你0或1 测试:
这应该可以,给你0或1 测试:
我不确定这是否可行:gt、eq等是查询的WHERE部分使用的表达式。这里您要做的是在SELECT的字段列表中进行操作,SELECT由Arel的project方法处理。这是有效的:
Arel::Table.new(:products).project(product[:id].count.as(:exists))
但是,如果您添加条件gt0,它将不起作用
这并不新奇,但它满足了您的需要:
Arel::Table.new(:products).project(Arel.sql('COUNT(id) > 0').as('exists'))
我不确定这是否可行:gt、eq等是查询的WHERE部分使用的表达式。这里您要做的是在SELECT的字段列表中进行操作,SELECT由Arel的project方法处理。这是有效的:
Arel::Table.new(:products).project(product[:id].count.as(:exists))
但是,如果您添加条件gt0,它将不起作用
这并不新奇,但它满足了您的需要:
Arel::Table.new(:products).project(Arel.sql('COUNT(id) > 0').as('exists'))
注:这其中很多都是猜测,因为Arel在所有实际用途中完全没有文档记录!也许有更好或更快的方法可以做到这一点,但从表面上看,下面的内容应该是正确的
请记住,Arel的这些部分只生成需要传递给SelectManager或其他可以处理它们的实体的AST节点
要生成语法元素,可以执行以下操作:
node=Arel::Nodes::As.new
Arel::Table.new:products[:id].count.gt0,
“存在”
它将生成SQL片段计数“products”。“id`>0作为“exists”,您可以将其传递到SelectManager的项目中。你可以做一些小把戏,比如:
产品
.where无获取关系的快捷方式
.点击do | rel|
节点=从上方
进入SelectManager并*添加*投影。
如果要*替换*整个投影,请首先执行以下操作:
相关预测=[]
rel.arel.projectnode
终止
至于根据数据库后端将谓词的结果实际映射回正确的Ruby布尔值,我留给读者作为练习,也就是说,这就是我来这里寻找正确方法的原因。注意:这很多都是猜测,因为Arel在所有实际用途中完全没有文档记录!也许有更好或更快的方法可以做到这一点,但从表面上看,下面的内容应该是正确的
请记住,Arel的这些部分只生成需要传递给SelectManager或其他可以处理它们的实体的AST节点
要生成语法元素,可以执行以下操作:
node=Arel::Nodes::As.new
Arel::Table.new:products[:id].count.gt0,
“存在”
它将生成SQL片段计数“products”。“id`>0作为“exists”,您可以将其传递到SelectManager的项目中。你可以做一些小把戏,比如:
产品
.where无获取关系的快捷方式
.点击do | rel|
节点=从上方
进入SelectManager并*添加*投影。
如果要*替换*整个投影,请首先执行以下操作:
相关预测=[]
rel.arel.projectnode
终止
至于根据数据库后端将谓词的结果实际映射回正确的Ruby布尔值,我将此作为读者的练习,也就是说,我就是这样来到这里寻找正确的方法的