【发布时间】:2015-07-30 00:08:04
【问题描述】:
对于作为 API 的项目,我希望能够创建具有开始和结束日期的“事件”。
发送诸如“2015 年 5 月 18 日星期一 12:56:10 UTC +00:00”之类的日期时间并不容易,而且在前端应用程序中解析是一场噩梦。
我想要实现的是允许我的用户发送时间戳,并将其转换为数据库中的日期时间。
但是,如果我的字段被声明为在 DB 中有 Datetime,当我尝试创建一个带有时间戳的新行时,它不起作用并为这些字段返回 nil。
Event.create(start_at: Time.now.to_i, end_at: Time.now.to_i)
#<Event:0x007ff02424c838
id: nil,
start_at: nil,
end_at: nil>
到目前为止,我想要这个:
before_validation :start_end_to_date
def start_end_to_date
self.start_at = Time.at(self.start_date).to_time
self.end_at = Time.at(self.end_date).to_time
end
在这种情况下,我的用户发送 start_date 参数,我将其转换为 Datetime。
你能帮帮我吗?
【问题讨论】:
-
Convert to/from DateTime and Time in Ruby 的可能副本。在提出新问题之前,您应该真正搜索您的问题。
-
@Micah 我的问题不在于如何将“时间戳”转换为“日期时间”。但是在创建新行时,activerecord 字段如何接受时间戳。
-
不需要。数据库在大多数情况下是类型安全的,因为 activerecord 应该与数据库相关联,所以它通常也是类型安全的。我建议您转换时间对象以匹配数据库中的内容,而不是尝试在结构中存储错误的类型。
-
我不会存储错误的类型。我希望我的用户能够向我发送时间戳,然后将其转换为我的数据库的正确数据类型。
-
那么我做的重复标志就是你想要的。您想接收一个时间对象,并将其转换为日期时间。那篇文章告诉你该怎么做。
标签: ruby-on-rails