Установка default_timezone для одной модели - PullRequest
1 голос
/ 16 февраля 2012

У меня проблема с чтением из базы данных, которая подается из другой системы, поскольку я просто могу читать из нее, и дата и время хранятся в: местном часовом поясе.

Как и в приложениях 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

Бег "рельсы с"

> 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, то есть локальное.

Есть много способов обойти это, например, установить before_filter на каждом контроллере, но это просто не похоже на Rubyist.

1 Ответ

2 голосов
/ 05 апреля 2012

Не должно ли быть:

self.default_timezone = :local

В противном случае вы создаете локальную переменную с именем "default_timezone".

Если вы просто хотите, чтобы он применялся к одному классу, вы можете создать метод singleton:

class ExternalTable < ActiveRecord::Base
  def self.default_timezone
    :local
  end
end

Немного хакерский, но должен работать.

...