我有一個:birth_date
型號的date
型號。將數據自由格式存入數據庫
我試圖把一個像3 janvier 1968
(法語)字符串放入該字段中,並以某種方式在數據庫中看到PostgreSQL或其他人將其轉換爲日期!
我也嘗試了一些其他日期,如3 février 1968
或類似3 fevrier 1968
哪些沒有工作,結果是在DB dbNULL
。
我無法在任何地方找到關於此功能的信息。這個怎麼用?
我有一個:birth_date
型號的date
型號。將數據自由格式存入數據庫
我試圖把一個像3 janvier 1968
(法語)字符串放入該字段中,並以某種方式在數據庫中看到PostgreSQL或其他人將其轉換爲日期!
我也嘗試了一些其他日期,如3 février 1968
或類似3 fevrier 1968
哪些沒有工作,結果是在DB dbNULL
。
我無法在任何地方找到關於此功能的信息。這個怎麼用?
如果您在數據庫中有一個類型爲'date'的列,它只會保存爲一個日期。如果可能,Rails最好將字符串轉換爲可識別的日期。您應該始終將「birth_date」數據作爲日期(即使用date_field)。否則,如果您真的想將其作爲字符串存儲,則birth_date列必須是數據庫中的字符串類型
Rails從數據庫定義中知道屬性爲Date
,因此它將您給它的字符串轉換爲Date
。如果您在Rails的控制檯模型的新實例,並分配給birth_date
,你也可以說這已經是一個日期,你把它保存到數據庫中,即使前:
m = Model.new # Use your model name
m.birth_date = "3 février 1968"
m.birth_date.class
控制檯應該告訴你,m.birth_date
是一個Date
。
因此,在將模型保存到數據庫之前完成到Date
的轉換。 Rails定義了一個調用Ruby ::Date.parse
方法的String::to_date
方法,該方法將各種可讀的日期字符串轉換爲Date
(https://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html#method-c-parse)。在Rails源代碼中,您會看到,使用to_date
方法將分配給Date
屬性的任何內容都轉換爲Date
。因此,當您指定String
時,它通過String::to_date
發生,其調用Date.parse
。
正如你在你的評論中提到的,Date.parse
似乎採取了一個相當寬鬆的方法來解釋他們的月份。我在Date.parse
裏嘗試過各種英文,法文和西班牙文月份,只要非英文月份的前三個字母與英文月份相同,Date.parse
就會將它們轉換。但是,如果前三個字母不同,則Date.parse
會引發錯誤。
我也考慮過語言環境,但是我有'en_US.UTF-8'語言環境。這很奇怪 –
我想我誤解了。是你的問題,「爲什麼Rails將字符串轉換爲日期」,還是「爲什麼Rails將法語日期轉換爲日期,當我的語言環境是英語時」,或者兩者都是? –
兩者。我也在想這個,我有一個想法。像英語一樣,'janvier'以'jan'開頭。 'février'不以'feb'開頭。也許Rails會自動嘗試將字符串轉換爲日期,就像它是某種英文格式的日期一樣。 –