【问题标题】:Custom time validation in Rails works on create, but not editRails 中的自定义时间验证适用于创建,但不适用于编辑
【发布时间】:2012-01-25 21:33:25
【问题描述】:

我有一个自定义验证方法,可以确保以后只能设置警报..

class Alarm < ActiveRecord::Base

  validate :alarm_set_in_the_future

  def alarm_set_in_the_future
    if time <= DateTime.current
      errors.add(:alarm, "Please Choose A Future Date & Time")
    end
  end

这很好用,测试在创建新警报记录时通过。太棒了...

但是,在编辑警报时,time 变量被设置为以下日期时间,我不知道为什么!

2000-01-01 03:28:00 UTC

因此,验证失败。

时间参数在哪里重置?救命!

【问题讨论】:

  • 也许我看错了,但不应该反过来吗? “时间> =时间.当前”?所以你正在测试它是否比现在更大?
  • 另外,我知道大写“T”的时间是一个保留字。与小写“t”有冲突吗?使用更具描述性的列名(如“alarm_time”)可能更有意义。
  • Time 不是保留字。这是一个类的名称。
  • Rails 有 'DateTime.current',类似于 Ruby 中的 Time.now

标签: ruby-on-rails validation time


【解决方案1】:

查看您的表单提交的内容。问题似乎不太可能在于验证本身。

您很可能在保存记录时从表单中获得了一些虚假数据。保存前控制器中@alarm.time的值是多少? params 哈希是什么样的?

【讨论】:

  • 时间属性的数据类型是“时间”而不是“日期时间”。将数据类型更改为 datetime 有效。
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多