【问题标题】:Arel, nested NamedFunctionArel,嵌套的 NamedFunction
【发布时间】:2016-11-06 11:00:52
【问题描述】:

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

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

使用http://www.scuttle.io/ 会简单地返回:

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>):

有办法解决吗?

【问题讨论】:

    标签: ruby-on-rails arel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      试试:

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

      【讨论】:

      • 我是疯了还是这与 OP 的代码相同?
      • 对不起,我一定是贴了 OP 的帖子,而不是我自己的答案>,
      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多