我从其他系统提供的数据库读取时遇到问题,就像在中一样,我只能从中读取,并且日期时间存储在:local时区中。
与Rails3.2应用程序一样,它"应该"存储在:utc中,作为该应用程序中的所有其他表。
我只需要这个模型:local。其余部分必须在:utc中
我的本地时区是"UTC-04:00"
class ExternalTable < ActiveRecord::Base
establish_connection :otherdb
table_name :iseries_table <-- I have to live with it.
default_timezone = :local
puts "my default timezone is #{default_timezone}"
#lot's of defs
.....
end
运行"轨道c"
> ExternalTable.inspect
«lot´s of attributes»
my default timezone is :utc <---utc!?. I have just set it to :local!?!?!?
> ExternalTable.default_timezone
:utc
> ExternalTable.default_timezone = :local
:local
> ExternalTable.default_timezone
:local <--- yeah, right. Setting it AFTER instantiated, works.
因此,Rails似乎正在将所有ActiveRecord.Base时区设置回:utc,在初始化后,覆盖ActiveRecord的默认值,即:local。
有很多方法可以实现这一点,比如在每个控制器上设置一个before_filter,但这似乎不是Rubister喜欢的。
不应该是:吗
self.default_timezone = :local
否则,您将创建一个名为"default_timezone"的本地变量。
如果你只想把它应用于一个类,你可以创建一个单例方法:
class ExternalTable < ActiveRecord::Base
def self.default_timezone
:local
end
end
有点粗鲁,但应该行得通。
在Rails6中,您已经可以编写问题,它将设置从BiLocalTimeRecord继承的每个类,datetime为本地时间:
module Bi
class BiLocalTimeRecord < ActiveRecord::Base
self.abstract_class = true
self.default_timezone = :local
establish_connection :cybros_bi
end
end