合并 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 }