2012-01-23 1 views
0

테이블을 멋지게 유지하기 위해 JSON 개체를 저장하는 DataMapper의 기능을 활용할 수있을 것이라고 생각했지만 문서에서 JSON 값을 쿼리하는 방법을 명확하게 설명하지 않았습니다. 내가 지금처럼 농구 경기의 점수를 저장하고 있습니다 : 순간DataMapper를 사용하여 JSON으로 인코딩 된 열의 내용을 어떻게 쿼리합니까?

{"NJN":[15,20,27,23,85],"CLE":[17,17,28,29,91]} 

, 클리블랜드 캐벌리어스가 플레이하는 게임을 찾기 위해, 나는이 일을 해요 :

Game.all.reject { |g| !g.scores['CLE'] } 

이 매우이다 느리고 비효율적이다. Game.all(:scores['CLE'])NoMethodError을 던집니다. 그렇다면 적절한 구문은 무엇입니까?

답변

2

JSON을 검색하는 것은 아닙니다. DB에 JSON을 저장할 수 있으면 유용하지만 검색해야 할 경우 스키마를 다시 생각해야합니다. DataMapper가 좋은 데이터베이스 디자인을위한 은하계는 아닙니다.)

JSON을 사용하는 이유를 간단하다고 가정하면 JSON으로 인코딩 된 데이터를 별도의 모델로 이동하고 연결을 사용하여 매핑해야합니다. 마이그레이션을 작성하여 현재 저장된 레코드를 새 형식으로 변환 할 수 있습니다. 해당 정보에 쿼리를 많이하고있을 경우

Game.all :scores.like => "%CLE%" 

, 당신은 성능 향상을 위해 정규화 된 데이터베이스 스키마를 사용하는 것이 좋습니다 : 작동해야 점수 열에 문자열 "CLE"를 포함하는 행을 검색