【问题标题】:Set Timezone For User Before Create Rails在创建 Rails 之前为用户设置时区
【发布时间】:2016-07-16 23:50:37
【问题描述】:

我正在尝试在 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 不起作用,因为未创建用户。

【问题讨论】:

    标签: ruby-on-rails ruby api timezone


    【解决方案1】:

    我认为您正在寻找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。

    【讨论】:

    • nope 不起作用,并且类顶部的 before_create 是错误的 :(
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多