在我的应用程序中,我需要根据当前用户的时间记录created_at
,因为我需要根据用户创建记录的时间应用不同的规则和条件。
这就是我所做的: 在 application.rb :
中 config.time_zone = 'Melbourne'
config.active_record.default_timezone = :local
但是,当来自不同时区的用户创建记录或更新记录时,它会保存为Melbourne
时区。我认为默认时区将设置为用户创建记录的位置。
基本上我需要能够为created_at
和updated_at
执行此操作:
Time.zone.now
所以我在初始化文件夹中执行了以下操作:
我已使用以下代码添加 timestamp.rb :
module ActiveRecord
module Timestamp
def self.included(base) #:nodoc:
base.alias_method_chain :create, :timestamps
base.alias_method_chain :update, :timestamps
base.class_inheritable_accessor :record_timestamps, :instance_writer => false
base.record_timestamps = true
end
private
def create_with_timestamps #:nodoc:
if record_timestamps
t = Time.zone.now
write_attribute('created_at', t) if respond_to?(:created_at) && created_at.nil?
write_attribute('created_on', t) if respond_to?(:created_on) && created_on.nil?
write_attribute('updated_at', t) if respond_to?(:updated_at) && updated_at.nil?
write_attribute('updated_on', t) if respond_to?(:updated_on) && updated_on.nil?
end
create_without_timestamps
end
def update_with_timestamps(*args) #:nodoc:
t = Time.zone.now
write_attribute('updated_at', t) if respond_to?(:updated_at)
write_attribute('updated_on', t) if respond_to?(:updated_on)
end
end
end
我重新启动了服务器,但没有任何改变,我仍然得到错误的时区录音。如果我以某种方式强迫Rails使用我的Timestamp覆盖,这个问题就会解决。
这是在我的本地机器上午10:15
以下是触发created_at
后create
的示例:
created_at: "2014-12-09 22:15:09"
现在,当我在控制台中运行Time.zone.now
时,我得到了
Wed, 10 Dec 2014 10:15:09 EST +11:00
仅供参考:(不确定这是否重要。) 数据库位于不同时区的Amazon RDS上,它是Postgresql。