如何从应用程序覆盖rails 4模块

时间:2014-12-09 23:11:12

标签: ruby-on-rails ruby postgresql datetime timezone

在我的应用程序中,我需要根据当前用户的时间记录created_at,因为我需要根据用户创建记录的时间应用不同的规则和条件。

这就是我所做的: 在 application.rb

 config.time_zone = 'Melbourne'
 config.active_record.default_timezone = :local

但是,当来自不同时区的用户创建记录或更新记录时,它会保存为Melbourne时区。我认为默认时区将设置为用户创建记录的位置。

基本上我需要能够为created_atupdated_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_atcreate的示例:  created_at: "2014-12-09 22:15:09"

现在,当我在控制台中运行Time.zone.now时,我得到了 Wed, 10 Dec 2014 10:15:09 EST +11:00

仅供参考:(不确定这是否重要。) 数据库位于不同时区的Amazon RDS上,它是Postgresql。

0 个答案:

没有答案