为什么DateTime.new仅返回年份?

时间:2018-11-22 11:43:27

标签: ruby-on-rails ruby date yaml seed

我想将YAML文件中的DateTime植入seed.rb中

这是来自seed.rb的代码

$user = User::where('nickname', 'like', '%' . strtolower($nickname) . '%')->first();

和帖子YAML文件中:

created_at: DateTime.new("#{post['created_at']}".to_i)

此输出为created_at: 2010-04-16

问题是:在YAML文件中应以哪种格式创建_at?

2 个答案:

答案 0 :(得分:2)

使用DateTime#parse

DateTime.parse('2010-04-16')
#⇒ Fri, 16 Apr 2010 00:00:00 +0000

例如:

created_at: DateTime.parse(post['created_at'])

如果post['created_at']已经是DateTime的实例(例如,已加载YAML,则)按原样分配它:

created_at: post['created_at']

答案 1 :(得分:0)

当您选中"2010-04-16".to_i时,您将得到2010。因此,您致电DateTime.new(2010)并获得了看到的结果。

您不能使用字符串本身,DateTime.new("2010-04-16")会导致类型错误。

但是Yaml在解析2010-04-16时已经将其转换为日期,所以我想您可以使用post['created_at'].to_datetime

完整的原始红宝石示例:

require 'yaml'
require 'date'
post = YAML.load('created_at: 2010-04-16')
p post['created_at']  #-> #<Date: 2010-04-16 ((2455303j,0s,0n),+0s,2299161j)>
p post['created_at'].to_datetime #-> #<DateTime: 2010-04-16T00:00:00+00:00 ((2455303j,0s,0n),+0s,2299161j)>

您的seed.rb可能看起来像

created_at: post['created_at'].to_datetime