Arel - 如何合并字段和字符串文字?

时间:2018-05-31 18:01:04

标签: ruby-on-rails activerecord default arel coalesce

我继承了一个从大量表中提取的大而复杂的Arel查询。一项新的要求是,如果其中一个标签没有特定字段的值("区"),我应该将其默认为" Global"。

由于查询构建和视图中的抽象级别很高,因此我无法在查询之前或之后插入该默认值。因此,如果字段为nil或者没有匹配的行,我需要在Arel查询的字段中插入默认值。

如何在Arel查询中将字段默认为字符串值?

1 个答案:

答案 0 :(得分:2)

我找到了搜索网的所有部分,但没有找到粘在一起的所有部分,所以我在这里分享,所以我可以在下次再找到它!

SQL coalesce用于提供默认值。

要将coalesce引入查询,我使用Arel::Nodes::NamedFunction。 NamedFunction允许您引用Arel不了解的任何SQL函数。

注意SqlLiteral字符串中的单引号。

supplier_table = Supplier.arel_table

district = Arel::Nodes::NamedFunction.new(
  'coalesce',
  [supplier_table[:district], Arel::Nodes::SqlLiteral.new("'Global'") ]
).as('district')

ProductHistoryResult.joins(some_join, some_other_join).select(
  [this_arel, that_arel, the_other_arel, district]
).where(product_history_request_id: id)