Activerecord Arel——如何将列转换为当前时区&;截断毫秒

Activerecord Arel——如何将列转换为当前时区&;截断毫秒,activerecord,arel,rails-activerecord,Activerecord,Arel,Rails Activerecord,我一直试图找到详细的Arel文档,但徒劳无功。最后,我试着深入研究源代码,并找到了你 以下工作(请注意最后的to_sql): 以及以下工作: tzdate = Arel::Nodes::InfixOperation.new('at time zone', Arel::Nodes::InfixOperation.new('at time zone', Audits.arel_table[:created_at], 'gmt'), Time.zone.tzinfo.name) 由于TypeErro

我一直试图找到详细的Arel文档,但徒劳无功。最后,我试着深入研究源代码,并找到了你

以下工作(请注意最后的to_sql):

以及以下工作:

tzdate = Arel::Nodes::InfixOperation.new('at time zone', Arel::Nodes::InfixOperation.new('at time zone', Audits.arel_table[:created_at], 'gmt'), Time.zone.tzinfo.name)
由于
TypeError:无法访问Arel::Nodes::InfixOperation
,以下操作不起作用(请注意最后的to_sql):

Arel::Nodes::NamedFunction.new('to_char', [tzdate, 'dd-mm-yyyy']).to_sql

有人能告诉我这里发生了什么吗?

这里有两个问题:

  • 您需要使用
    Arel.new('dd-mm-yyyy')
    包装日期格式字符串(这将生成
    Arel::Nodes::SqlLiteral
  • 时区字符串需要加引号(例如,
    Arel::Nodes::quoted.new('UTC')
    )。看
Arel::Nodes::NamedFunction.new('to_char', [tzdate, 'dd-mm-yyyy']).to_sql