Postgresql uuid_generate_v5 使用 Arel

Postgresql uuid_generate_v5 using Arel

我正在尝试使用 Arel 构建如下查询:

SELECT uuid_generate_v5(uuid_ns_url(),CONCAT('hello', 'world')) # 3fc82e1a-b051-595a-8564-27a096716d37

到目前为止我有以下内容:

composite_keys = ['hello', 'world']
quoted_composite_keys = composite_keys.map do |composite_key|
  Arel::Nodes.build_quoted(composite_key)
end

concat = Arel::Nodes::NamedFunction.new('concat', quoted_composite_keys)
uuid_ns_url = Arel::Nodes::NamedFunction.new('uuid_ns_url', [])
uuid_generate_v5 = Arel::Nodes::NamedFunction.new('uuid_generate_v5', [uuid_ns_url, concat]).as('uuid')
select_statement = Arel::SelectManager.new(ActiveRecord::Base, project: uuid_generate_v5)

但是在执行 select_statement.to_sql 时出现以下错误:

*** RuntimeError Exception: unsupported: Hash

nil

看来问题是关于要投影的内容,我不确定要传递给 select 什么。

有人使用 Arel 做过类似的事情吗?

事实证明,我在创建 SelectManager:

时需要使用稍微不同的语法
select_statement = Arel::SelectManager.new(ActiveRecord::Base).project(uuid_generate_v5)