2016-08-16 5 views
2

日付フィールドがあるテーブルがあります。コンソールを使って日付を保存するには?私は試しました event = Event.create(name:"Concert", date:08/20/2016, location:'Portland', state:'OR') しかし、私は無効な8進数のエラーが表示されます。コンソールを使用して日付をレールに保存する方法

+2

あなたの日付は文字列ではないので、それは次のように解析されています数。 0から始まる数字は8進数として解釈され、8はそこで有効な数字ではありません。 –

答えて

2

あなたはDate.parseメソッドで文字列から取得することができ、実際のDateオブジェクトに渡ししたいと思う:私は別の形式にするためにあなたの日付を書き換えてきた

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 
関連する問題