在单个模型上设置default_timezone



我从其他系统提供的数据库读取时遇到问题,就像在中一样,我只能从中读取,并且日期时间存储在: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

相关内容

  • 没有找到相关文章

最新更新