【发布时间】:2018-05-29 14:01:02
【问题描述】:
我的应用程序提供了创建具有特定格式的开始日期和结束日期的事件的机会。事件不应持续超过两周,因此事件控制器使用before_action 检查此情况:
def correct_time
@event = current_user.events.build(event_params)
if (@event.end_time.to_datetime - @event.start_time.to_datetime) > 2.weeks
flash[:danger] = "Attention! Events cannot last longer than 2 weeks"
redirect_to root_url
end
end
所以当我能够创建以下持续 22 天的事件时,我感到很困惑:
>> event = Event.last
=> #<Event id: 1, user_id: 1, place: "barcelona", start_time: "2017-12-24 10:26", end_time: "2018-01-15 10:26", created_at: "2017-12-15 09:27:13", updated_at: "2017-12-15 09:27:13">
显然这个条件不成立,因为 Rails 以秒为单位出错:
>> (event.end_time.to_datetime - event.start_time.to_datetime)
=> (22/1)
>> (event.end_time.to_date - event.start_time.to_date) > 2.weeks
=> false
>> (event.end_time.to_datetime - event.start_time.to_datetime) == 22.days
=> false
>> (event.end_time.to_datetime - event.start_time.to_datetime) == 22.seconds
=> true
我不知道为什么会发生这种情况以及如何解决它,除了在上面的表达式中使用14.seconds 而不是2.weeks,但那是不正确的。
【问题讨论】:
标签: ruby-on-rails ruby datetime time