2016-08-17 4 views
0

serializeで検索するのが悪いことが分かっていますが、この問題が発生します。railsで検索してシリアル化する

私は、質問と呼ばれるモデルを持って、シリアル化列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

したがって、この例の結果は、私が

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

それは作品を思わ

を試してみたが、どのように配列を適用する

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

ようにすべきですか?

そしてこのanswerよると、私はしかし、それは空白の配列を返す

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

を試してみました。

+0

どのデータベースを使用していますか(postrgesql/mysql)?どのシリアライザを使用しますか(JSON、ハッシュ、カスタム)ですか?シリアル化する列(Text、JSON、hstore)のどちらのタイプですか? – slowjack2k

+0

mysql、JSON、Text –

答えて

0

mysql 5.7。? JSONデータを直接クエリできます。私はそれを試してみたが

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

のようなものが動作するはずドキュメントを以下ませんでした。テキストをJSONデータ型に変換し、jsonドキュメントと最適化されたストレージの検証を行うことができます。

+0

私はmysql 5.6を使用していますが、使用するのは非常に困難です。私は多くの属性にシリアル化列を変更する必要があると思う。 –

+0

SQLを使用してjsonデータをクエリする必要があり、データベースがJSONクエリをサポートしていない場合は、データモデルをリファクタリングすることをお勧めします。 – slowjack2k

関連する問題