【发布时间】:2012-03-08 00:08:18
【问题描述】:
我从其他系统提供的数据库读取时遇到问题,因为我只能从中读取,并且日期时间存储在 :local timezone 中。
与 Rails 3.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
运行“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。
【问题讨论】:
-
我有同样的问题,只是反过来 - 只需要一个模型
:utc -
难点在于 default_timezone 是class attribute。将其设置在一个模型上,它也适用于您的其他模型。
标签: ruby-on-rails ruby-on-rails-3 timezone rails-activerecord utc