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

时间:2013-02-03 16:22:49

标签: activerecord arel rails-activerecord

我一直在努力寻找详细的Arel文档,但是徒劳无功。最后,我尝试深入挖掘源代码并想出ou

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

Arel::Nodes::NamedFunction.new('to_char', Audit.arel_table[:created_at], 'dd-mm-yyyy').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: Cannot visit Arel::Nodes::InfixOperation,以下内容不起作用(最后请注意to_sql):

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

谁能告诉我这里发生了什么?

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  • 您需要用Arel.new('dd-mm-yyyy')包装日期格式字符串(这会产生Arel::Nodes::SqlLiteral)。
  • 时区字符串需要加引号(例如Arel::Nodes::Quoted.new('UTC'))。参见https://github.com/rails/arel/issues/323