mysql - Rails Time to String - 要么忽略函数,要么随机行为

标签 mysql ruby-on-rails ruby activerecord time

在 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/

相关文章:

ruby - 以编程方式调用 Sass::Exec::Sass Convert 会生成错误的语法

java - MYSQL 中特定列中的重复项显示为空

ruby-on-rails - Rails 中的每日轮换产品

Ruby - 确定方法来源?

ruby-on-rails - Rails 6 升级中未初始化的常量 ActiveRecord::ConnectionAdapters::ConnectionManagement (NameError)

ruby-on-rails - 默认情况下,Rails是否具有“零”并发性?

ruby-on-rails - 教程 Michael Hartl 在 9.3 上访问 edit_user_path 失败

Mysql:选择今天起的所有订单(转换unix时间戳)

MySQL:如果列包含多个ID,如何使用左连接获取数据?

php - 查询未从两个表中获取数据