ruby-on-rails – 日期范围的自定义ActiveAdmin过滤器
发布时间:2020-12-17 03:17:41 所属栏目:百科 来源:网络整理
导读:我需要为属于另一个资源的日期范围创建自定义ActiveAdmin过滤器.我想按照完成调查的日期范围过滤用户列表. 我在ActiveAdmin DSL中声明了一个自定义过滤器,如下所示: filter :by_date_completed,label: 'By Date Completed',as: :date_range 这使我在活动管
我需要为属于另一个资源的日期范围创建自定义ActiveAdmin过滤器.我想按照完成调查的日期范围过滤用户列表.
我在ActiveAdmin DSL中声明了一个自定义过滤器,如下所示: filter :by_date_completed,label: 'By Date Completed',as: :date_range 这使我在活动管理员中成为一个很好的日期范围来限制我的用户.都好. 我还没有找到关于如何做到这一点的文档,但在我的用户模型中,我试图创建一个ransacker来处理过滤器. ransacker :by_date_completed,{ formatter: proc { |start_date,end_date| time_range = start_date..end_date users = User.joins(:surveys).where(surveys: { updated_at: time_range}) users = users.map(&:id) users.present? ? users : nil },callable: proc { |parent| parent.table[:id] } } 但是ActiveAdmin一次将日期范围传递给过滤器,所以我无法获得搜索范围? 在这种情况下我打算做什么?我是以错误的方式解决整个问题吗? 解决方法
我认为你不需要自定义搜索引擎.您可以过滤交叉关联.
这应该适合你: filter :surveys_updated_at,as: :date_range 你做的不是,一个洗劫者应该如何工作.我知道这是一个常见的谷歌结果,但这是错误的. >在ActiveAdmin中,搜索者不会立即收到两个日期.搜索者将使用by_date_completed_gteq和by_date_completed_lteq进行调用. 一个抽象的ransacker示例: ransacker :foo do "ransacker sql code" end "SELECT * FROM bar WHERE 'ransacker sql code' = <input>" 您的搜索范围应如下所示: ransacker :by_date_completed do "surveys.updated_at" end 这应该最终在一个查询,如: "SELECT * FROM users WHERE surveys.updated_at >= START_DATE AND surveys.updated_at <= END_DATE" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |