0

我遇到了 Rails 4 对 Postgresql 的 ts_range 数据类型的支持的问题。这是我试图坚持的代码:

before_validation :set_appointment
attr_accessor :starting_tsrange, :ending_tsrange

def set_appointment
  self.appointment = convert_to_utc(starting_tsrange)...convert_to_utc(ending_tsrange)
end

def convert_to_utc
  ActiveSupport::TimeZone.new("America/New_York").parse(time_string).utc
end

基本上,我为约会 ts_range 的开始和结束设置了一个实例变量,其中两个字符串表示 date_times。在验证之前,它将它们转换为 utc 并将这些值保存到应保留的约会属性中。它设置正确,但是当我尝试检索记录时,约会属性现在为零。为什么这段代码没有按预期工作?

4

1 回答 1

0

找出代码中的细微错误。这里的问题在于三点范围运算符。如果我们得到两个完全相同的时间值。三点表示包含从时间 a 到时间 b 的所有内容,如果它们是相同的确切时间,则不会包含任何内容,结果将为 nil。这可以用下面的代码可视化

(1...1).to_a # []
(1..1).to_a # [1]

因此,解决此问题的方法是在使用可能具有相同值的范围时不要使用三点符号。请改用双点符号。

于 2013-08-05T00:02:24.830 回答