gpt4 book ai didi

sql - Rails ActiveRecord Arels : Unsupported argument type: String. 改为构造一个 Arel 节点

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:47 24 4
gpt4 key购买 nike

我正在使用 Arels 创建查询。在此查询中,我使用了 generate_series 函数。这是我的代码:

    def generate_series
Arel::Nodes::NamedFunction.new('GENERATE_SERIES', [start_date, end_day, '1 day'])
end

def start_date
Arel::Nodes::SqlLiteral.new(<<-SQL
CASE WHEN DATE_PART('hour', NOW() AT TIME ZONE 'ICT') < #{Time.now - 3days} THEN (CURRENT_DATE - INTERVAL '14 days') ELSE (CURRENT_DATE - INTERVAL '13 days') END
SQL
)
end

def end_date
Arel::Nodes::SqlLiteral.new(<<-SQL
CASE WHEN DATE_PART('hour', NOW() AT TIME ZONE 'ICT') < #{Time.now} THEN (CURRENT_DATE - INTERVAL '1 day') ELSE CURRENT_DATE END
SQL
)
end

当我尝试通过 generate_series.to_sql 进行测试时。我遇到异常:

Arel::Visitors::UnsupportedVisitError: Unsupported argument type: String. Construct an Arel node instead.

我尝试缩短测试代码:

def generate_series
Arel::Nodes::NamedFunction.new('GENERATE_SERIES', ['19/11/2012', '20/11/2012', '1 day'])
end

问题是一样的。请告诉我如何解决这个问题。

最佳答案

您可以使用 Arel::Nodes.build_quoted 来引用文字:

def generate_series
Arel::Nodes::NamedFunction.new('GENERATE_SERIES',
[start_date, end_date, Arel::Nodes.build_quoted('1 day')]
)
end

这样做的好处是您不必像使用 Arel::Nodes::SqlLiteral 那样记住包含和手动转义引号。

关于sql - Rails ActiveRecord Arels : Unsupported argument type: String. 改为构造一个 Arel 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41246379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com