2016-08-16 51 views
2

我有一个表中有一个日期字段。我将如何使用控制台保存日期?我试过 event = Event.create(name:"Concert", date:08/20/2016, location:'Portland', state:'OR') 但是,我得到一个无效的八进制数字错误。如何使用控制台将日期保存到导轨中

+2

您的日期不是一个字符串,因此它解析为数。以0开头的数字被解释为八进制数,8不是那里的有效数字。 –

回答

2

你会想在实际Date对象,你可以从与Date.parse方法得到的字符串传递:

event = Event.create(name: "Concert", date: Date.parse('2016-08-20'), location: 'Portland', state: 'OR') 

请注意,我已经重写你的约会是在一个不同的格式。 MM/DD/YYYY格式是而不是可以跨地区使用,所以我强烈建议您使用YYYY-MM-DD(ISO 8601格式)。

1

试试这个,例如:

date = Date.parse('3rd Feb 2001') ####=> #<Date: 2001-02-03 ...> 

参考:Date class

2

以正确的格式使用字符串会做的伎俩。例如:

>> foo = Foo.create date: "20/8/2016" 
    (0.0ms) begin transaction 
    SQL (1.0ms) INSERT INTO "foos" ("date") VALUES (?) [["date", Sat, 20 Aug 2016]] 
    (0.9ms) commit transaction 
#<Foo id: 1, date: "2016-08-20"> 
>> foo.date 
Sat, 20 Aug 2016 

ActiveSupport为字符串类型转换为日期,时间和日期时间的String类提供了核心扩展。这可能是好的,并且更方便,可以利用Rails控制台进行测试。

利用应用程序本身的这个扩展(而不是用Date.parse明确解析)完全取决于你和你的团队。

source

"1-1-2012".to_date # => Sun, 01 Jan 2012 
"01/01/2012".to_date # => Sun, 01 Jan 2012 
"2012-12-13".to_date # => Thu, 13 Dec 2012 
"12/13/2012".to_date # => ArgumentError: invalid date 

只是要彻底,实例为String#to_time

"13-12-2012".to_time    # => 2012-12-13 00:00:00 +0100 
"06:12".to_time     # => 2012-12-13 06:12:00 +0100 
"2012-12-13 06:12".to_time   # => 2012-12-13 06:12:00 +0100 
"2012-12-13T06:12".to_time   # => 2012-12-13 06:12:00 +0100 
"2012-12-13T06:12".to_time(:utc) # => 2012-12-13 06:12:00 UTC 
"12/13/2012".to_time    # => ArgumentError: argument out of range 

而且String#to_datetime

"1-1-2012".to_datetime   # => Sun, 01 Jan 2012 00:00:00 +0000 
"01/01/2012 23:59:59".to_datetime # => Sun, 01 Jan 2012 23:59:59 +0000 
"2012-12-13 12:50".to_datetime # => Thu, 13 Dec 2012 12:50:00 +0000 
"12/13/2012".to_datetime   # => ArgumentError: invalid date