Activerecord 无法获取活动\u记录。时区\u感知\u属性&;跳过\u属性的\u时区\u转换\u

Activerecord 无法获取活动\u记录。时区\u感知\u属性&;跳过\u属性的\u时区\u转换\u,activerecord,ruby-on-rails-5,Activerecord,Ruby On Rails 5,我似乎无法在我的Rails 5应用程序中获得跳过\u时区\u转换\u属性或活动\u记录。时区\u感知\u属性 在我的application.rb中,我有 config.active_record.default_timezone = :local config.active_record.time_zone_aware_attributes = false 在我的模型中,我有 self.skip_time_zone_conversion_for_attributes = [:start_dat

我似乎无法在我的Rails 5应用程序中获得跳过\u时区\u转换\u属性或活动\u记录。时区\u感知\u属性

在我的application.rb中,我有

config.active_record.default_timezone = :local
config.active_record.time_zone_aware_attributes = false
在我的模型中,我有

self.skip_time_zone_conversion_for_attributes = [:start_date, :end_date]
然而,当stat日期和end日期作为JSON发送回客户机时,它们总是转换成客户机时区。我不希望这样,因为我需要向客户机显示服务器时间

为什么这不起作用?我是否需要执行其他操作以确保模型中的开始日期和结束日期不会转换为用户时区


谢谢,这是因为rails有几个陷阱。最重要的是因为Time.now和Time.current是完全不同的东西

config.time_zone = 'Berlin' # Your local time zone
config.active_record.default_timezone = :local
config.active_record.time_zone_aware_attributes = false
这是application.rb中存在的字段,用于使模型的所有时间相关属性发生变化

比如说- 如果您没有提到任何时区,那么默认情况下将采用“UTC”

post = Post.create
post.created_at # => Mon, 22 Apr 2019 06:43:08 UTC +00:00 

Time.current # => Mon, 22 Apr 2019 06:43:35 UTC +00:00 
Time.now # => 2019-04-22 12:13:40 +0530 
在数据库和Time.current中显示“UTC”格式,但Time.now正在选择本地时区

现在如果你改变时区

config.time_zone = 'Berlin'
那么

现在,在您的数据库中,以“UTC”时区存储的值创建了\u,但当您检索该字段时,它以设置时区格式显示,表示“Berlin”。但还是你的时间。现在在你当地的时区

现在根据您的问题,我正在使用跳过\u时区\u转换\u作为\u属性,并将我的模型更改为时区为“Berlin”

class Post < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:created_at]
end
根据跳过\u时区\u转换\u属性方法,当我重试属性时,跳过该属性-在它处创建的\u以“UTC”格式显示,而不是我设置的时区“Berlin”,工作正常

因此,在JSON中设置之前,这可能有助于您理解并检查设置

有关更多信息,请参阅此链接-


这是由于rails有几个陷阱造成的。最重要的是因为Time.now和Time.current是完全不同的东西

config.time_zone = 'Berlin' # Your local time zone
config.active_record.default_timezone = :local
config.active_record.time_zone_aware_attributes = false
这是application.rb中存在的字段,用于使模型的所有时间相关属性发生变化

比如说- 如果您没有提到任何时区,那么默认情况下将采用“UTC”

post = Post.create
post.created_at # => Mon, 22 Apr 2019 06:43:08 UTC +00:00 

Time.current # => Mon, 22 Apr 2019 06:43:35 UTC +00:00 
Time.now # => 2019-04-22 12:13:40 +0530 
在数据库和Time.current中显示“UTC”格式,但Time.now正在选择本地时区

现在如果你改变时区

config.time_zone = 'Berlin'
那么

现在,在您的数据库中,以“UTC”时区存储的值创建了\u,但当您检索该字段时,它以设置时区格式显示,表示“Berlin”。但还是你的时间。现在在你当地的时区

现在根据您的问题,我正在使用跳过\u时区\u转换\u作为\u属性,并将我的模型更改为时区为“Berlin”

class Post < ActiveRecord::Base
  self.skip_time_zone_conversion_for_attributes = [:created_at]
end
根据跳过\u时区\u转换\u属性方法,当我重试属性时,跳过该属性-在它处创建的\u以“UTC”格式显示,而不是我设置的时区“Berlin”,工作正常

因此,在JSON中设置之前,这可能有助于您理解并检查设置

有关更多信息,请参阅此链接-