Rails ищет сериализованные записи - PullRequest
2 голосов
/ 10 октября 2011

В модели я сериализую категорию столбца в модели событий как массив, поэтому у меня есть

serialize :category

Дело в том, что мне нужно предоставить функцию поиска пользователям.Итак, как мне искать, если категория находится внутри события.

Event.find(:all, :conditions => ['category = ?', params[:category]])

Это не будет работать, поскольку категория хранится в виде сериализованного массива.Любая идея?

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

Event.all.select{|e| e.category.include? params[:category]}

Это неэффективно вообще.

Или ещеЯ могу использовать как заявление

Event.find(:all, :conditions => ['category = ?', "%-#{params[:category]}%"])

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Я бы создал отдельную таблицу и модель для категорий.Затем вы можете получить все события в категории, используя ассоциацию has_many.

1 голос
/ 13 ноября 2014

Вы можете использовать .to_yaml для соответствия формату сериализации, хранящемуся в БД.

Event.where(category: params[:category].to_yaml)
0 голосов
/ 16 мая 2018
Event.where("category IN (?)" , params[:category].to_yaml)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...