日期过滤不适用于Rails - Ransack,Activeadmin

时间:2015-11-13 05:13:30

标签: ruby-on-rails activeadmin ransack

我的应用程序使用Rails,Activeadmin和Ransack。

最近我注意到日期过滤工作不正常。我还检查了与Activeadmin分开的控制器,问题仍然存在。这可能是一个Ransack问题吗?

日志表明params正确传递,它们仍然在URL中。计数工作正常,但实际查询不会发生。有什么想法可以在这里发生什么?我最近升级到Ruby 2.2,但我不确定这是否相关。

以下是参数:

Started GET "/admin/users?utf8=%E2%9C%93&q%5Bcreated_at_gteq%5D=2015-11-01&q%5Bcreated_at_lteq%5D=2015-11-30&q%5Brole_contains%5D=read&commit=Filter&order=id_desc" for 50.17.182.190 at 2015-11-13 05:16:52
 +0000

在这里,您可以看到SQL查询中从未使用过日期:

User Load (0.8ms)  SELECT  "users".* FROM "users"  WHERE ("users"."role" ILIKE '%read%')  ORDER BY "users"."id" desc LIMIT 30 OFFSET 0

完整日志如下:

Started GET "/admin/users?utf8=%E2%9C%93&q%5Bcreated_at_gteq%5D=2015-11-01&q%5Bcreated_at_lteq%5D=2015-11-30&q%5Brole_contains%5D=read&commit=Filter&order=id_desc" for 50.17.182.190 at 2015-11-13 05:16:52
 +0000
Processing by Admin::UsersController#index as HTML
  Parameters: {"utf8"=>"✓", "q"=>{"created_at_gteq"=>"2015-11-01", "created_at_lteq"=>"2015-11-30", "role_contains"=>"read"}, "commit"=>"Filter", "order"=>"id_desc"}
  User Load (0.4ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 1  ORDER BY "users"."id" ASC LIMIT 1
   (0.4ms)  SELECT COUNT(*) FROM "users"  WHERE ("users"."role" ILIKE '%read%')
   (0.3ms)  SELECT COUNT(*) FROM "users"  WHERE ("users"."role" ILIKE '%read%') AND (created_at > '2015-11-01 00:00:00.000000')
   (0.3ms)  SELECT COUNT(*) FROM "users"  WHERE ("users"."role" ILIKE '%read%') AND (created_at > '2015-11-09 00:00:00.000000')
   (0.3ms)  SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "users"  WHERE ("users"."role" ILIKE '%read%') LIMIT 30 OFFSET 0) subquery_for_count
  CACHE (0.0ms)  SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "users"  WHERE ("users"."role" ILIKE '%read%') LIMIT 30 OFFSET 0) subquery_for_count
  CACHE (0.0ms)  SELECT COUNT(*) FROM "users"  WHERE ("users"."role" ILIKE '%read%')
  CACHE (0.0ms)  SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "users"  WHERE ("users"."role" ILIKE '%read%') LIMIT 30 OFFSET 0) subquery_for_count
  User Load (0.8ms)  SELECT  "users".* FROM "users"  WHERE ("users"."role" ILIKE '%read%')  ORDER BY "users"."id" desc LIMIT 30 OFFSET 0

1 个答案:

答案 0 :(得分:0)

我刚遇到这样的问题。事实证明,我是以美国格式(mm-dd-yyyy)提交日期,但服务器将其解释为yyyy-mm-dddd-mm-yyy,这会导致您的日期无提示失败并返回nil一次导轨/ ruby​​处理它。我安装了american_date gem并修复了它。

Ruby内部(在DateDateTime类)用于处理美国日期很好,但社区已经决定(可能是正确的)美式日期并不是很好的默认对于国际用户。所以这可能是你在升级ruby之后注意到这一点的原因。