Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActionController::TestCase作为UTC插入,但select返回声明为UTC的本地时间 太长,读不下去了_Ruby On Rails_Timezone_Functional Testing_Testunit - Fatal编程技术网

Ruby on rails ActionController::TestCase作为UTC插入,但select返回声明为UTC的本地时间 太长,读不下去了

Ruby on rails ActionController::TestCase作为UTC插入,但select返回声明为UTC的本地时间 太长,读不下去了,ruby-on-rails,timezone,functional-testing,testunit,Ruby On Rails,Timezone,Functional Testing,Testunit,我有一个RoR 3应用程序,它运行在我正在为其编写功能测试的PostgreSQL数据库上。我注意到一些奇怪的事情,这导致了很多测试问题:时间从select返回,转换成我的本地时间,但声称是UTC 基本上,当我运行测试时,我会创建如下时间: appointment_time = 1.day.from_now 打印输出会将约会时间输出 2014-01-08 20:08:14 UTC 但是,当我在插入数据库并打印出来后,在那个时间进行选择时,会显示professional.appointment\u

我有一个RoR 3应用程序,它运行在我正在为其编写功能测试的PostgreSQL数据库上。我注意到一些奇怪的事情,这导致了很多测试问题:时间从select返回,转换成我的本地时间,但声称是UTC

基本上,当我运行测试时,我会创建如下时间:

appointment_time = 1.day.from_now
打印输出会将约会时间输出

2014-01-08 20:08:14 UTC

但是,当我在插入数据库并打印出来后,在那个时间进行选择时,会显示professional.appointment\u时间

2014-01-08 15:08:14 UTC

请注意有5个小时的差异-这是有道理的,因为我在东部标准时间,比UTC晚5个小时。但也要注意返回的时间声称是UTC-因此它似乎是在EST中,但认为它是在UTC中

尽管我的application.rb文件包含

# configure the default timezone for app and db
config.time_zone = 'UTC'
config.active_record.default_timezone = 'UTC'
更多信息和代码 以这些课程为例:

def Professional
  has_many :appointments
end

def Appointment
  belongs_to :professional
  attr_accessible :start_time
end
以及AppointController.rb中的以下代码片段:

在专业控制器测试中,我有以下几点

test 'add conflicting appointment returns conflict' do
  professional = create(:professional)
  start_time = 1.day.from_now
  post :create, { professional_id: professional.id, appointment: { start_time: start_time } }
  puts "ORIGINAL TIME: #{start_time}"
  puts "SELECTED TIME: #{professional.appointments.first.start_time}"
  assert_response :success

  post :create, { professional_id: professional.id, appointment: { start_time: start_time } }
  assert_response :conflict
end
此测试应通过,因为要创建的第一个post将创建一个约会,而该约会将导致第二个post由于调用冲突而返回冲突?但它失败了,因为第二个响应实际上是成功的!此处的输出如下所示:

原始时间:2014-01-08 20:08:14 UTC

选定时间:2014-01-08 15:08:14 UTC

同样,我在东部时间,比UTC晚5个小时,所以我可以想象看到这样的情景:

2014-01-08 15:08:14美国东部时间

这很有道理,但似乎在某个地方时间被转换为EST,但仍然认为是UTC

如前所述,my application.rb有以下两行:

config.time_zone = 'UTC'
config.active_record.default_timezone = 'UTC'

所以我今天在一个不同的场景中偶然发现了这一点。原来

config.active\u record.default\u时区

默认为:local,如果您传递任何它不理解的内容。而且它不理解UTC,这是我传递给它的!由于config.time_zone=UTC有效,因此存在一些差异。要将其设置为UTC,您必须通过“UTC”:

config.active\u record.default\u时区=:utc

因此,我的application.rb现在包含:

config.time_zone = 'UTC'
config.active_record.default_timezone = :utc
config.time_zone = 'UTC'
config.active_record.default_timezone = :utc