rails - postgres 或 rails 是不是自动验证 datetime 列只能具有 datetime 对象?

Posted

技术标签:

【中文标题】rails - postgres 或 rails 是不是自动验证 datetime 列只能具有 datetime 对象?【英文标题】:rails - does postgres or rails automatically validate that a datetime column can only have datetime object?rails - postgres 或 rails 是否自动验证 datetime 列只能具有 datetime 对象? 【发布时间】:2013-12-21 16:05:12 【问题描述】:

我有一个 rails 4 表单,用户在其中输入一个代表日期时间的字符串:

<%= f.text_field :time_frame, class: "calender_pop" %><br />

没有在我的代码中将字符串转换为日期时间的位置。我尝试在字段中输入非日期时间输入(即整数、字符串等),但日期时间不接受它们。如果我尝试输入非日期时间值,则日期时间变为 nil。这很好,但我很困惑,因为我从来没有写过任何这样的验证。我以前使用过 postgres,并且能够将整数放入字符串列,所以我不知道 postgres 或 rails 有任何自动验证。

    postgres 或 rails 是否自动验证日期时间? time_frame 列填充的是字符串还是日期时间?

我也在使用查询 datetimepicker 插件,但我认为这与数据类型无关。

更新:

我跑了:

Task.last.time_frame.is_a? Time

它返回真。

那么问题 3。发生了什么?它是如何以及何时转换为时间的?

更新:

我刚刚读到 postgres 实际上没有 datetime 类型。会不会和 orm 改变数据类型有关?

【问题讨论】:

***.com/a/9440927/525478 【参考方案1】:

伙计,它完全不是铁轨。它是 jQuery datetimepicker。

检查这些链接,

http://jquery.10927.n7.nabble.com/jQuery-datepicker-allow-non-date-text-input-td131163.html

https://forum.jquery.com/topic/datepicker-any-way-to-disable-the-textbox-28-5-2010

jQuery Datepicker with text input that doesn't allow user input

【讨论】:

谢谢,我看了一下文章。我没有发现任何说 datetimepicker 正在将数据类型转换为时间的内容? 菲利普,探索更多。它不是铁轨。它的 jQuery【参考方案2】:

1.- 我不会称之为验证。正如您已经看到的那样,它被解析为时间。只要它可以解析为时间(我猜它使用 Time.parse),它就会返回时间。验证是限制有效时间子集的规则。例如,验证将是检查是否只接受过去的时间。

2.- 如果该列在 postgres 中定义为日期时间,则无论 Rails 做什么,它都不能填充日期时间以外的任何内容。

3.- 我猜你在这里使用了 form_for。由于您在此处传递对象的实例,因此 rails 表单助手知道每个属性的类型。因此,当您要求它为该属性提供一个文本字段时,它实际上是一个日期时间(rails 从数据库中解析此信息),他知道它必须被转换。现在,这究竟是什么时候发生的,我不知道。但我猜这个助手足够聪明,可以调用 time_field 而不是 text_field:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-time_field

您可以通过查看生成的 HTML 来检查这一点。

【讨论】:

你到底在说什么?

以上是关于rails - postgres 或 rails 是不是自动验证 datetime 列只能具有 datetime 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除rails的postgres用户密码?

Postgres 13.2 on rails 5.2.4.1: ActiveRecord::NoDatabaseError: FATAL: database * does not exist on r

如何在 Rails 3 的 Postgres 数据库中使用枚举? [关闭]

使用 Activerecord、Rails 和 Postgres 查找具有多个重复字段的行

使用 Rails 5 在 Postgres 中存储字符串化 JSON

在 Postgres 迁移后,Rails 写入时间增加了 100%