【问题标题】:ransack specify timezone in search queryransack 在搜索查询中指定时区
【发布时间】:2013-04-08 15:36:51
【问题描述】:

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

SELECT DISTINCT "orders".* FROM "orders" LEFT OUTER JOIN "customers" ON "customers"."id" = "orders"."customer_id" LEFT OUTER JOIN "payments" ON "payments"."order_id" = "orders"."id" 左外连接 "order_lines" ON "order_lines"."order_id" = "orders"."id" WHERE "orders"."test_transaction" = 'f' AND (("orders"." created_at" >= '2012-11-03 07:00:00.000000' AND "orders"."created_at"

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      它有点脏,但可以工作

      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 中的时区

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多