在 Ruby on Rails 3 中,我正在尝试修改我的 Model
数据集的日期仅显示小时和分钟,然后我将其作为 AJAX 字符串返回。
我的代码如下:
list_of_time_fields = [:a, :list, :of, :symbols]
result = Model.where(conditions).take(100)
result.each { |row|
list_of_time_fields.each { |field|
row[field] = row[field].strftime("%H:%M") unless row[field].nil?
}
}
return result
对于某些字段,我得到整个时间字符串(类似于 yyyy-mm-ddTHH:MM:ssZ
),对于其他字段,我得到 null
即使该字段不为空。不同的是,返回字符串的是 TIME
MySQL 中的字段,而其他字段是 DATETIME
.
我已经检查了 Rails 将这些列映射到的类型,一切都是 class Time
.
如果您能指出我应该看哪些内容,那就太好了。
最佳答案
将时间字符串分配给属性时:
row[field] = row[field].strftime("%H:%M")
Rails 解析字符串并创建一个新的日期时间(实际上是一个 ActiveSupport::TimeWithZone
)对象:
user = User.new
user.created_at = "01:00"
#=> "01:00"
user.created_at
#=> Thu, 28 Nov 2013 01:00:00 CET +01:00
使用自定义哈希就可以了。像这样的东西:
result = Model.where(conditions).take(100).map { |model|
{
id: model.id,
time_field: model.time_field.try(:strftime, "%H:%M")
}
}
render json: result
JBuilder可能是另一种选择。
关于mysql - Rails Time to String - 要么忽略函数,要么随机行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264206/