合并 baby_squeel / arel in Rails
Coalesce with baby_squeel / arel in Rails
我正在尝试使用 baby_squeel 编写一个相当复杂的查询。查询需要使用 coalesce
SQL 函数。 coalesce
在 baby_squeel 主页上被多次用作示例,但是当我尝试在查询中使用它时,出现无方法错误。
示例如下:
result = Table.selecting { |t| [t.col1,
((coalesce(t.col2, 0) + coalesce(t.col3, 0)).sum.as('column'))] }
.where.has { |t| t.col4 == 'some condition' }
.grouping { |t| t.col1 }
我正在使用 Rails 5 和 baby_squeel 1.2。查询在私有控制器函数内部调用。
为什么会这样?我是否需要 require
某些东西或使用 arel 自己定义函数?
不确定这是否对任何人有帮助,但我找到了我所缺少的东西。由于我为块提供了 arity,因此在这种情况下我必须引用我想与 airty 变量一起使用的函数 t
。正确的代码是:
result = Table.selecting { |t| [t.col1,
((t.coalesce(t.col2, 0) + t.coalesce(t.col3, 0)).sum.as('column'))] }
.where.has { |t| t.col4 == 'some condition' }
.grouping { |t| t.col1 }
我正在尝试使用 baby_squeel 编写一个相当复杂的查询。查询需要使用 coalesce
SQL 函数。 coalesce
在 baby_squeel 主页上被多次用作示例,但是当我尝试在查询中使用它时,出现无方法错误。
示例如下:
result = Table.selecting { |t| [t.col1,
((coalesce(t.col2, 0) + coalesce(t.col3, 0)).sum.as('column'))] }
.where.has { |t| t.col4 == 'some condition' }
.grouping { |t| t.col1 }
我正在使用 Rails 5 和 baby_squeel 1.2。查询在私有控制器函数内部调用。
为什么会这样?我是否需要 require
某些东西或使用 arel 自己定义函数?
不确定这是否对任何人有帮助,但我找到了我所缺少的东西。由于我为块提供了 arity,因此在这种情况下我必须引用我想与 airty 变量一起使用的函数 t
。正确的代码是:
result = Table.selecting { |t| [t.col1,
((t.coalesce(t.col2, 0) + t.coalesce(t.col3, 0)).sum.as('column'))] }
.where.has { |t| t.col4 == 'some condition' }
.grouping { |t| t.col1 }