通过应用程序控制器和自定义rake任务设置Time.zone

时间:2013-02-04 15:51:03

标签: ruby-on-rails timezone rake

在我的User模型中,我有一种显示时间的方法:

def display_time
    puts "Time is: #{Time.zone.now}"
end

我为应用程序控制器中的before过滤器中的每个用户设置Time.zone,然后调用display_time方法:

def my_before_filter
    Time.zone = current_user.time_zone
    current_user.display_time
end

我还在我的rake任务(每小时cron作业)的循环中为每个用户设置Time.zone,然后调用相同的方法:

Users.all.each do |user|
    Time.zone = user.time_zone
    user.display_time
end

如何确保两个时区设置不会相互干扰?

我希望display_time方法始终通过应用程序控制器使用Time.zone集,除非从cron任务的循环中调用它。我怎样才能做到这一点?

提前致谢!

1 个答案:

答案 0 :(得分:0)

让display_time取时间参数。

def my_before_filter
  Time.zone = current_user.time_zone
  current_user.display_time(Time.zone.now)
end

# app/models/user.rb
def display_time(current_time)
  puts "Time is: #{current_time}"
end

从您的佣金任务中,发送您想要的current_time