ActiveModel很脏,可以忽略毫秒

时间:2018-11-17 14:30:28

标签: ruby-on-rails ruby ruby-on-rails-5

在Rails中比较日期时间时,如何使ActiveModel :: Dirty忽略毫秒。

     news.publish_at
     => Fri, 16 Nov 2018 17:05:37 CET +01:00

     news.publish_at = news.publish_at.to_s
     => "2018-11-16 17:05:37 +0100"

     news.publish_at_changed?
     => true

但是,如果我在上述日期时间加上毫秒数,会更改吗?是错误的。

     news.publish_at = "2018-11-16 17:05:37.517 +0100"
     => "2018-11-16 17:05:37.517 +0100"

     news.publish_at_changed?
     => false

我正在使用Rails 5.2.1

1 个答案:

答案 0 :(得分:1)

我认为最简单的解决方法可能是向该模型添加一个自定义设置器,该赋值器在分配新值时每次都会截断毫秒。

def publish_at=(value)
  if value
    time_without_usec = DateTime.parse(value).change(usec: 0)
    value = time_without_usec.to_s
  end

  super(value)
end