在Rails中与baby_squeel / arel合并

时间:2017-12-06 14:55:48

标签: ruby-on-rails arel coalesce squeel

我正在尝试使用baby_squeel编写一个相当复杂的查询。该查询需要使用coalesce SQL函数。在baby_squeel主页上多次使用coalesce作为示例,但当我尝试在查询中使用它时,我得到一个无方法错误。

以下示例:

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自己定义函数?

1 个答案:

答案 0 :(得分:0)

不确定这是否会对任何人有所帮助,但我找到了我所缺少的东西。由于我给了块,我必须引用我希望在这种情况下使用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 }