定义哪些模型将被转换为activerecord时区配置



我正在寻找一种方法,仅在某些模型中使用ActiveRecord时区配置,或者在一些我不需要的方法中禁用它。

像这样:

Models User, Access, Sale使用与application.rb相同的时区:配置。Time_zone = "xxxx"

但是Models Lap, CheckIn不使用时区设置或UTC。

我想使用一个after_initialize方法来清除time_zone配置和一些像*after_free*(我知道它不存在)从旧配置值中恢复时区设置。

这不是一种简单的方法吗?

如果您希望在特定模型上执行此操作,或者针对特定模型上的特定字段,本文中描述的方法对我来说很有效。

# Turn it off for just some columns
class Picture < ActiveRecord::Base
 def self.skip_time_zone_conversion_for_attributes
   [:created_at, :published_at]
 end
end
# Turn it off for the whole model
class Picture < ActiveRecord::Base
  def self.time_zone_aware_attributes
    false
  end
end

如果有帮助,下面是我的测试用例:

before :all do
  @current_tz = Time.zone
  # Test usually runs in UTC; test this as if in production, per config/application.rb
  Time.zone = 'Pacific Time (US & Canada)'
end
after :all do
  Time.zone = @current_tz
end
it 'should report UTC time as UTC time' do
  new_obj = MyModel.create(start_time: DateTime.new(2013, 3, 31, 0, 0, 0, 0))
  new_obj.reload
  new_obj.start_time.to_s.should == 'Sun, 31 Mar 2013 00:00:00 +0000'
end

你在找这个吗?

希望有帮助。

编辑:试着执行这样的操作:在你的

class Lap < ActionController::Base
 before_filter :remove_time_zone
 def remove_time_zone
  ActiveRecord::Base.time_zone_aware_attributes = false
 end
end

或:

Lap.time_zone_aware_attributes = false

相关内容

  • 没有找到相关文章

最新更新