我有以下代码:
around_filter :event_time_zone
def event_time_zone(&block)
@event.present? ? Time.use_zone(@event.venue.time_zone_name, &block) : yield
end
我把它放在我的ApplicationController中。
问题是,当调用此around_filter时,实例变量@event永远不会被设置。然而,它在每个资源控制器中的操作之前可用(通过使用CanCan),但是我不想在所有这些控制器中撒上一堆around_filter调用。
有没有一种简单的方法可以使用上面的代码而不是在任何地方重复自己?
我可以做一个基于用户的time_zone,但是如果用户管理不同时区的事件呢?要显示的唯一相关日期只能在事件时区中。
答案 0 :(得分:1)
我认为您的问题与过滤器触发的排序有关,即around_filter在设置@event
变量的过滤器之前运行
我个人会根据需要为每个控制器执行此操作,您的应用程序最终会有许多与事件无关的控制器/操作。
@event
设置时区以覆盖用户设置您可能对我在rails timezones上发表的这篇博文感兴趣(另请参阅github上的示例代码) - http://jessehouse.com/blog/2013/11/15/working-with-timezones-and-ruby-on-rails/