2

我有一个 Rails ActiveRecord 组查询:

a = Product.select("date(date) as date, count(id) as products").group("date(date)").to_a 

我想更改数组中所有日期的格式。我认为它会是这样的:

a.map { |s, i| [Date.parse(s).to_time.strftime("%Y-%m-%dT%H:%M:%S"), i] }

但是,我收到一个can't convert Product into String错误。如何解析数组中的日期并更改其格式?

编辑:

这是我正在寻找的输出示例。

鉴于此表:

 create_table :products do |t|
       t.date :date
 end

最终,我想根据上面的组查询创建一个 json 输出。就像是:

 [{"products":23,"date":"2012-06-15T00:00:00"}, {"products":26,"date":"2012-06-16T00:00:00"}] 
4

2 回答 2

3

尝试这个:

a.map { |s, i| [Date.parse(s.date).to_time.strftime("%Y-%m-%dT%H:%M:%S"), i] }

Product您的查询返回一个包含两个假字段date和的对象数组products(与 SQL 查询中的相同)。要获取日期,您应该调用s.date返回数组的元素。

编辑

要获得所需的数组,您可以执行以下操作:

query_result = Product.select("date(date) as date, count(id) as products").group("date(date)")

query_result.map do |row| 
  { :products => row.products, :date => Date.parse(row.date).to_time.strftime("%Y-%m-%dT%H:%M:%S") }
end
于 2012-07-01T11:42:01.437 回答
0

为什么不将 ActiveRecord::Relation 序列化为 JSON ( a.to_json) 并让 JSON 序列化程序处理日期格式?

Product.select("date(date) as date, count(id) as products").
  group("date(date)").to_json
于 2012-07-01T15:10:26.797 回答