自定义 Ransacker 以忽略数据库中的破折号

Custom Ransacker to ignore dash in database

我正在尝试自定义 Ransack 以允许搜索文本字段并可能让 ransack 忽略 dash 字符。

示例:

如果我在搜索框中输入:

123456

Ransack 查询不会在数据库中找到这条记录:

123-456

现在,如果我不输入破折号,将找不到记录。我明白为什么它试图匹配数据库记录,但显然没有找到它,因为需要破折号才能找到该记录。

是否可以自定义 Ransack,以便搜索仍能找到参数中没有破折号的记录?

看起来创建一个自定义的 Ransacker 就可以解决这个问题。

ransacker :number do
  Arel.sql("translate(number, '-', '')")
end

这将在使用 Ransack 搜索时从数据的数据库表示中删除破折号。