ransack在搜索查询中指定时区

时间:2013-04-16 09:36:02

标签: ruby-on-rails ruby search timezone ransack

我正试图找到一种方法,我可以告诉ransack在涉及日期或日期范围的查询中使用特定时区。例如,ransack默认使用UTC进行日期时间搜索,我想使用PST时区执行查询,我该怎么做?有任何黑客或配置?以下是生成的示例查询。

SELECT DISTINCT“orders”。* FROM“orders”LEFT OUTER JOIN“customers”ON“customers”。“id”=“orders”。“customer_id”LEFT OUTER JOIN“payment”ON“payment”。“order_id” =“orders”。“id”LEFT OUTER JOIN“order_lines”ON“order_lines”。“order_id”=“orders”。“id”WHERE“orders”。“test_transaction”='f'AND((“order”。“ created_at“> ='2012-11-03 07:00:00.000000'和”orders“。”created_at“< ='2012-11-05 06:59:59.000000'))

由于

2 个答案:

答案 0 :(得分:1)

不确定Ransack的细节,但通常如果您将UTC日期存储在数据库中,那么您应该按UTC值进行查询。

如果您的查询日期是太平洋时间,那么在将它们传递给您的查询之前将它们转换为UTC。您可以使用诸如timezoneTZInfoActiveSupport::TimeZone之类的Ruby gem进行转换。

答案 1 :(得分:0)

有点脏,但有效

current_zone = Time.zone.name # Get default time zone
Time.zone = "UTC" #Change to whatever time zone you want. 
@search = Model.search(params[:q]) 
@objects = @search.result
Time.zone = current_zone #Set default time zone

检查http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-local_to_utc

中的时区