在rails serialize列中搜索

时间:2016-08-17 10:20:04

标签: ruby-on-rails activerecord serialization

我知道在serialize中搜索是不好的,但我遇到了这个问题。

我有一个名为Question的模型,包含一个序列化列assignments

id question_set_id  assignments
1   1               {"12982": true, "12332": true}
2   2               {"12222": true, "12332": true}
3   3               {'11111': true}

我得到了一个名为group_ids

的数组
group_ids = ["12982","12332"] 

我需要找到group_id中至少包含一个assignments的记录。

所以,这个例子的结果应该是

[
    {
                     :id => 1,
        :question_set_id => 1,
            :assignments => {"12982": true, "12332": true}
    },
    { 
                     :id => 2,
        :question_set_id => 2,
            :assignments => {"12222": true, "12332": true}
    }
]

我已经尝试了

Question.where("assignments IS NOT NULL").where("assignments LIKE '%?%'", 12982)

似乎有效,但如何应用数组?

根据answer,我试过

Question.where("assignments IS NOT NULL").where("assignments= ?", groups_ids.to_yaml)

但是,它会返回一个空白数组。

1 个答案:

答案 0 :(得分:0)

使用mysql 5.7。?您可以直接查询JSON数据。我没有尝试过,但是遵循类似

的文档
Question.where("JSON_CONTAINS_PATH(assignments , 'one', '$[*].assignments.12982', '$[*].assignments.12332') == 1")

应该有效。您可以更进一步将列从文本转换为JSON数据类型,并获得json文档和优化存储的验证。