我正在尝试在Rails中实现正确的时区处理。
每个用户都有不同的时区,因此数据库中存在每个用户的时区。
问题:当我创建用户时,我会将我从客户端获得的时区传递到时区。
用户有一些像已创建的字段,但我想在创建用户时保存正确的时间,而在更新模型时不。
这是我的模特:
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
无法正常工作,因为未创建用户。
答案 0 :(得分:2)
我认为您正在寻找callbacks,请参阅Callbacks上的Ruby on Rails指南here。
在这种情况下,您希望在创建记录时仅运行 功能,因此您将使用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。