我继承了一个从大量表中提取的大而复杂的Arel查询。一项新的要求是,如果其中一个标签没有特定字段的值("区"),我应该将其默认为" Global"。
由于查询构建和视图中的抽象级别很高,因此我无法在查询之前或之后插入该默认值。因此,如果字段为nil或者没有匹配的行,我需要在Arel查询的字段中插入默认值。
如何在Arel查询中将字段默认为字符串值?
答案 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)