【问题标题】:Rails 4 ts_range not persistingRails 4 ts_range 不持久
【发布时间】:2013-08-04 20:59:35
【问题描述】:

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 并将这些值保存到应保留的约会属性中。它设置正确,但是当我尝试检索记录时,约会属性现在为零。为什么这段代码没有按预期工作?

【问题讨论】:

    标签: ruby-on-rails postgresql range ruby-on-rails-4


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 2016-08-30
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2013-08-28
      • 2015-08-16
      • 2014-10-09
      • 2011-07-05
      相关资源
      最近更新 更多