Rails ActiveAdmin中Ransacker数值自定义过滤器失效及报错问题
解决ActiveAdmin自定义数值过滤器的问题
首先得说清楚,你用filter :premium_scenes_in的时候,ActiveAdmin默认把_in后缀识别为集合匹配过滤器(比如查询字段值在某个数组里),所以才会显示带“包含”“等于”的文本输入框,这和你想要的数值比较逻辑不匹配。
下面给你几个可行的解决方案:
1. 基础数值比较过滤器(带等于/大于/小于选项)
直接去掉_in后缀,指定as: :numeric类型,这样就能生成带数值比较选项的输入框:
filter :premium_scenes, as: :numeric
这个配置会自动生成包含「等于、大于、小于、大于等于、小于等于」这些选项的数值输入框,完全符合你的需求。
2. 数值范围过滤器(同时设置最小值和最大值)
如果你需要同时过滤“大于X且小于Y”的场景,可以用as: :number_range类型(注意是number_range不是你之前写错的numeric_range,这也是你报错的核心原因):
filter :premium_scenes, as: :number_range
这个会生成两个数值输入框,分别对应最小值和最大值,提交后会自动执行premium_scenes >= min AND premium_scenes <= max的查询。
为什么之前的写法会报错?
你之前用as: :numeric_range时出现Unable to find input class NumaricRangeInput错误,一是因为ActiveAdmin里根本没有这个输入类型,正确的范围输入类型是number_range;二是_in后缀的过滤器是为集合查询设计的,和数值输入类型天然不兼容,所以去掉_in才是正确的打开方式。
内容的提问来源于stack exchange,提问作者naqib83
相关产品推荐
相关产品推荐

