在创建轨道之前为用户设置时区



我正在尝试在Rails中实现正确的时区处理。

每个用户都有不同的时区,因此每个用户的时区都存在于数据库中。

问题是:当我创建一个用户时,我会将从客户端获得的信息传递到时区。

用户有一些类似created的字段,但我希望在创建用户时保存正确的时间,而在更新模型时保存而不是

这是我的型号:

require 'securerandom'
class User
  include Mongoid::Document
  include Mongoid::Paperclip
  field :created, type: Time
  field :time_zone, type: String
  def set_created
    self.created = Time.now.in_time_zone(self.time_zone)
  end
end 

这是应用程序控制器:

class ApplicationController < ActionController::API
  include ActionController::HttpAuthentication::Token::ControllerMethods
    around_filter :set_time_zone

  def current_user
    return unless params[:user_id]
    @current_user ||= User.find(params[:user_id])
  end
  private
  def set_time_zone(&block)
    time_zone = current_user.try(:time_zone) || 'UTC'
    Time.use_zone(time_zone, &block)
  end       
end

我设置了around_filter,但我不知道如何将time_zone参数传递给它。Currentuser不起作用,因为用户没有创建。

我认为您正在寻找回调,请参阅此处的RubyonRails回调指南。

在这种情况下,您希望在创建记录时仅运行函数,因此您将使用before_create:

class User
  before_create :set_created
  include Mongoid::Document
  include Mongoid::Paperclip
  field :created, type: Time
  field :time_zone, type: String
  def set_created
    self.created = Time.now.in_time_zone(self.time_zone)
  end
end

请注意类顶部的before_create。

相关内容

  • 没有找到相关文章

最新更新