Ransack与数组值完全匹配

paw*_*wan 12 ruby ruby-on-rails ransack

我必须使用ransack在数据库上执行搜索.数据库中的一些列将数据存储在序列化数组中.我想将存储在数组中的确切数据与用户发送的数据进行匹配以执行搜索(用户的数据也是数组).例如,在数据库中,一列的数据为(c1,c2是测试用例):

c1.column_data = [1, 2, 3, 4, 5]
c2.column_data = []
Run Code Online (Sandbox Code Playgroud)

用户搜索数据(t1,t2,t3是测试例):

t1.user_data = [1]
t2.user_data = [1, 3]
t3.user_data = [1, 2, 3, 4, 5]
t4.user_data = []
Run Code Online (Sandbox Code Playgroud)
  • 对于情况c1t1,t2,t4,它应该返回no match found.
  • t3,它应该导致match found.
  • 对于情况c2t1,t2,t3,它应该返回no match found.
  • 随着t4,它返回`匹配发现.

我找到了postgres_ext gem,但我无法使它工作.任何人都可以建议我如何做到这一点或建议任何替代搜索方法这样的?任何替代解决方案也欢迎.

paw*_*wan 5

我在回答我自己的问题.

它可能会有所不同.

我必须使用用户参数并在数据库中搜索是否有任何确切的数据匹配,然后将用户放在同一组中,否则用搜索到的数据创建一个新组,最后也为各个用户保存每个搜索到的数据.

由于所有字段都是多选下拉列表复选框等所有参数都是作为字符串数组出现的.

我对该问题的解决方法:1.对数组params进行排序,并使用逗号和字符串连接它.例如:

    a = [1,2,3,4,5,6]
    a.sort.join(',')
    "1,2,3,4,5,6"
Run Code Online (Sandbox Code Playgroud)

我将此字符串存储在文本中的数据库列中.否,当用户搜索组时,我会使用其参数并以逗号分隔的字符串再次转换它并使用where子句查询到数据库.

在UI中,我再次将此字符串转换为数组并将其显示给用户.

我不知道它是否正确的做法,但它对我有用.

仍然欢迎任何好的解决方案.