我正在寻找一种仅在某些型号中使用ActiveRecord时区配置的方法, 或者在某些我不需要的方法中禁用它的方法。
这样的事情:
模型User,Access,Sale使用与application.rb相同的时区: config.time_zone =“xxxx”
但是模型Lap,CheckIn不使用时区设置或UTC。
我考虑使用清除time_zone配置的after_initialize方法 和* after_free *之类的东西(我知道它不存在)从旧的配置值中支持时区设置。
这不是一个简单的方法吗?
答案 0 :(得分:6)
如果您希望在特定型号或特定型号的特定字段上执行此操作,this post中描述的方法对我来说效果很好。
# 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
答案 1 :(得分:1)
希望它有所帮助。
编辑:尝试执行以下操作: 在你的
class Lap < ActionController::Base
before_filter :remove_time_zone
def remove_time_zone
ActiveRecord::Base.time_zone_aware_attributes = false
end
end
OR:
Lap.time_zone_aware_attributes = false