Я нашел все части для этого поиска в сети, но не нашел все части, склеенные вместе, поэтому я делюсь этим здесь, чтобы я мог найти его снова в следующий раз!
SQL's coalesce
используется для предоставления значения по умолчанию.
Чтобы получить coalesce
в запросе, я использую Arel::Nodes::NamedFunction
.NamedFunction позволяет вам ссылаться на любую функцию SQL, о которой Arel не знает.
Обратите внимание на одинарные кавычки в строке 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)