Как можно сделать запрос содержимого JSON-кодированного столбца, используя DataMapper? - PullRequest
0 голосов
/ 23 января 2012

Я подумал, что воспользуюсь возможностью DataMapper хранить объекты JSON, чтобы сохранить мою таблицу красивой и аккуратной, но в документации не разъясняется, как следует запрашивать значения 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 ]

2 голосов
/ 23 января 2012

Не предполагается, что вы ищете в JSON. Полезно иметь возможность сохранить JSON в БД, но если вам нужно выполнить поиск по нему, вам нужно переосмыслить свою схему. DataMapper - не серебряная пуля для хорошего дизайна базы данных;)

Предполагая, что ваши причины использования JSON были просто удобством, вам следует переместить данные в кодировке JSON в отдельную модель и отобразить их с помощью ассоциации. Вы можете написать миграцию для преобразования сохраненных в данный момент записей в новый формат.

0 голосов
/ 23 января 2012

Поиск строк, содержащих строку «CLE» в столбце оценок, должен работать:

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

Если вы будете выполнять множество запросов к этой информации, вам следует рассмотреть возможность использования нормализованной схемы базы данных для улучшенияпроизводительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...