日期过滤在 Rails 上不起作用 - Ransack,Activeadmin
Date filtering is not working on Rails - Ransack, Activeadmin
我的应用程序使用 Rails、Activeadmin 和 Ransack。
最近我注意到日期过滤无法正常工作。我还检查了与 Activeadmin 分开的控制器,但问题仍然存在。会不会是 Ransack 问题?
日志表明参数被正确传递,并且它们还在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
我刚遇到这样的问题。事实证明,我提交的日期是美国格式 (mm-dd-yyyy
),但服务器将其解释为 yyyy-mm-dd
或 dd-mm-yyy
,这导致您的日期无提示地失败并且 return nil 一旦 rails/ruby 处理它。我安装了 american_date
gem 并修复了它。
Ruby 内部(在 Date
和 DateTime
类 中)用于处理美国日期就好了,但社区已经决定(可能是正确的)美国人-style 日期对于国际用户来说不是一个好的默认值。所以这可能就是您在升级 ruby.
后注意到这一点的原因
我的应用程序使用 Rails、Activeadmin 和 Ransack。
最近我注意到日期过滤无法正常工作。我还检查了与 Activeadmin 分开的控制器,但问题仍然存在。会不会是 Ransack 问题?
日志表明参数被正确传递,并且它们还在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
我刚遇到这样的问题。事实证明,我提交的日期是美国格式 (mm-dd-yyyy
),但服务器将其解释为 yyyy-mm-dd
或 dd-mm-yyy
,这导致您的日期无提示地失败并且 return nil 一旦 rails/ruby 处理它。我安装了 american_date
gem 并修复了它。
Ruby 内部(在 Date
和 DateTime
类 中)用于处理美国日期就好了,但社区已经决定(可能是正确的)美国人-style 日期对于国际用户来说不是一个好的默认值。所以这可能就是您在升级 ruby.