2016-08-17 2 views
0

serialize에서 검색하는 것이 좋지 않지만이 문제가 발생합니다.레일에서 검색하십시오.

나는 질문이라는 모델과는 assignments

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

직렬화 열을 포함하고있어 그리고 내가 배열 내가 적어도 하나 group_id를 포함하는 기록을 찾을 필요가

group_ids = ["12982","12332"] 

group_ids라고 있어요 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, Hash, Custom)? 직렬화 열 (텍스트, 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을 사용하고 있습니다. 사용하기가 매우 어려워 보입니다. 난 그냥 많은 특성을 serialize 열을 수정해야한다고 생각합니다. –

+0

SQL을 통해 json 데이터를 쿼리해야하고 데이터베이스가 JSON 쿼리를 지원하지 않으면 데이터 모델을 리팩터링하는 것이 좋습니다. – slowjack2k

관련 문제