Rails-запрос активной записи, сериализованный массив - PullRequest
3 голосов
/ 01 апреля 2012

Предположим, у меня есть данные о пользователях, которые хранят массив животных в типе String

[
  #<User id: 1, name: "John", pets: "---\n- cat\n- dog\n- bunny\n- ''\n">,
  #<User id: 2, name: "Pete", pets: "---\n- dog\n- bunny\n- ''\n">,
  #<User id: 3, name: "Jack", pets: "---\n- cat\n- ''\n">,
  #<User id: 4, name: "Kurt", pets: "---\n- cat\n- bunny\n- ''\n">
]

Могу ли я получить всех пользователей, у которых есть кошка? Может быть, что-то вроде User.find_all_by... или User.where(....) или что-то, что возвращается как отношение? Так что я могу заказать с активной записью запроса.

Я знаю, что могу получить всех пользователей, у которых есть кошка с

User.all.select{|s| YAML.load(s.pets).include?'cat'}

, но он преобразуется в массив, который нельзя упорядочить с помощью запроса активной записи.

Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Вы можете использовать простой SQL, чтобы увидеть, отображается ли 'cat' в столбце сериализации.

User.where('pets LIKE "%cat%"').all

1 голос
/ 01 апреля 2012

Вам нужно нормализовать свои данные, добавить модель питомца и установить связь между этими моделями has_and_belongs_to_many.

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