【发布时间】:2013-01-16 00:17:12
【问题描述】:
我正在尝试将 ActiveRecord 对象中的 MySQL 时间戳转换为另一种时间戳格式。我的方法接受一个 ActiveRecord 记录数组,并返回一个哈希数组,其中包含带时间戳的字段和格式化的时间戳:
def convert_mysql_timestamps(records)
ary = []
hash = {}
records.each_with_index do |record, i|
record.attributes.each do |field, value|
if time_columns.include?(field) and value then
hash[field] = value.strftime("%Y-%m-%dT%H:%M:%S%z")
else
hash[field] = value
end
end
ary[i] = {}
ary[i] = hash
end
ary
end
但是,在ary[i] = hash 赋值中,所有ary 元素都被设置为散列。
有没有更好的方法来转换记录的时间戳字段? (我不需要将记录保存回数据库。)另外,我怎样才能让数组来捕获记录的每个单独的哈希表示?
输入:
[#<Vehicle id: 15001, approved_at: "2011-03-28 10:16:31", entry_date: "2011-03-28 10:16:31">, #<Vehicle id: 15002, approved_at: "2011-03-28 10:16:31", entry_date: "2011-03-28 10:16:31">]
期望的输出:
[{"id"=>15001, "approved_at"=>"2011-03-28T10:16:31-0700", "entry_date"=>"2011-03-28T10:16:31-0700"}, {"id"=>15002, "approved_at"=>"2011-03-28T10:16:31-0700", "entry_date"=>"2011-03-28T10:16:31-0700"}]
【问题讨论】:
-
提供不起作用的代码无助于理解问题。不得不阅读这样的东西对读者来说简直是一种负担。提供示例输入和预期输出会更有帮助。
-
一个示例初始数据集也会有所帮助。
-
也许你的
hash = {}应该在你的each_with_index块内。 -
已添加输入和所需输出。
-
@mu 太短 - 你是对的。在 each_with_index 块内声明哈希修复了它。谢谢!如果您回复您的回复,我会检查它。
标签: ruby-on-rails ruby arrays hash