gpt4 book ai didi

ruby-on-rails - 自由格式的日期到数据库

转载 作者:行者123 更新时间:2023-11-29 14:17:45 24 4
gpt4 key购买 nike

我有一个 :birth_date 类型为 date 的模型。

我尝试将 3 janvier 1968(法语)之类的字符串放入该字段,然后在数据库中我看到 PostgreSQL 或其他人以某种方式将其转换为日期!

我还尝试了一些其他日期,例如 3 février 19683 fevrier 1968 没有用,结果是 NULL在数据库中。

我在任何地方都找不到有关此功能的信息。这是如何工作的?

最佳答案

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 源代码中,您会看到分配给 Date 属性的任何内容都会使用 to_date 方法转换为 Date。因此,当您分配一个 String 时,它会通过调用 Date.parseString::to_date 发生。

正如您在评论中提到的,Date.parse 似乎对拼写的月份采取了相当宽松的方法。我在Date.parse中尝试了多种英文、法文、西类牙文月份,只要非英文月份的前三个字母与英文月份相同,Date .parse 将转换它们。但如果前三个字母不同,则 Date.parse 会抛出错误。

关于ruby-on-rails - 自由格式的日期到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com