Arel,嵌套的 NamedFunction

Arel, nested NamedFunction

我正在尝试通过 Arel 编写此查询:

SELECT ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000) FROM Table1

使用http://www.scuttle.io/它return一个简单的:

Table1.select(
  Arel::Nodes::NamedFunction.new(
    'ROUND', [
      Arel::Nodes::NamedFunction.new(
        'UNIX_TIMESTAMP', [Arel::Nodes::NamedFunction.new('CURTIME', [4])]
      ) * 1000
    ]
  )
)

但我的 rails 应用程序不接受它,给我:

NoMethodError (undefined method `*' for #<Arel::Nodes::NamedFunction:0x0000000c7471e0>):

有办法解决吗?

尝试:

Table1.select(
  Arel::Nodes::NamedFunction.new(
    'ROUND', [
      Arel::Nodes::NamedFunction.new(
        'UNIX_TIMESTAMP', [Arel::Nodes::NamedFunction.new('CURTIME', [4])]
      ) * 1000
    ]
  )
)

我从未使用过 Arel 的这一部分,我现在无法对此进行测试,但我猜你需要使用 Arel::Nodes::Multiplication 而不是 *:

Arel::Nodes::Multiplication.new(
  Arel::Nodes::NamedFunction.new(
    'UNIX_TIMESTAMP', [Arel::Nodes::NamedFunction.new('CURTIME', [4])]
  ),
  1000
)