我从一个从其他系统提供的数据库中读取了一个问题,因为我只能读取它,并将日期时间存储在:本地时区。
与Rails 3.2应用程序一样,它“应该”存储在:utc中,作为此应用程序中的所有其他表格。
我需要这个模型才能进入:本地。其余的必须是: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
运行“rails 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,但它似乎并不像Rubyist那样。
答案 0 :(得分:2)
不应该是:
self.default_timezone = :local
否则,您将创建一个名为“default_timezone”的局部变量。
如果您只想将它应用于一个类,您可以创建一个单例方法:
class ExternalTable < ActiveRecord::Base
def self.default_timezone
:local
end
end
有点hackish但应该工作。
答案 1 :(得分:1)
在Rails 6中,您已经可以写为问题了,它将把从BiLocalTimeRecord继承的每个类都设置为datetime为本地时间。
module Bi
class BiLocalTimeRecord < ActiveRecord::Base
self.abstract_class = true
self.default_timezone = :local
establish_connection :cybros_bi
end
end