这两个代码段之间有什么区别?您什么时候应该使用一个与另一个使用?
time.zone
class ApplicationController < ActionController::Base
before_filter :set_time_zone
def set_time_zone
Time.zone = current_user.time_zone
end
end
time.use_zone
class ApplicationController < ActionController::Base
around_filter :set_time_zone
def set_time_zone(&block)
Time.use_zone(current_user.time_zone, &block)
end
end
似乎 Time.use_zone
在所提供的块内部覆盖了 Time.zone
,然后在完成后将Time.zone
重置为现有值。
因此,第二个代码块等效于在每种方法的开头调用Time.zone = current_user.time_zone
,然后将其重置回/config/application.rb
Time.zone
尽管我仍然不确定哪种建议方法。从性能角度来看,似乎第一个选择会更好,但是在某些情况下,第二种选择更有意义。
更多这里:
- http://api.rubyonrails.org/classes/time.html#method-c-use_zone
- http://railscasts.com/episodes/106 time-Zones-revied?view = asciicast