2014-11-14 3 views
0

У меня есть драгоценный камень Thinking Sphinx, и я использую его для замены моей текущей расширенной настройки поиска.Поиск пользователей в зависимости от их возраста от значения DOB

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

User.rb:

def age 
    now = Time.now.utc.to_date 
    now.year - birthday.year - ((now.month > birthday.month || (now.month == birthday.month && now.day >= birthday.day)) ? 0 : 1) 
end 

Я не знаю, как я могу добавить осуществлять поиск на основе пользовательских возрастов. Например, посетитель выбирает возраст из двойного окна с 22 по 27. Это должно возвращать пользователей, которые находятся в возрасте от 22 до 27.

Как это должно выглядеть, если кто-то может предоставить пример?

ответ

1

Не имеет смысла конвертировать пользовательский dob в возраст до сохранения, а затем просто сохранить возраст в БД? Поэтому в контроллере во время методов :create или :update просто запустите этот метод и сохраните возраст в БД.

+0

Да, я подумал об этом, но мне всегда советовали не сохранять возраст пользователя в базе данных. Я планирую иметь в какой-то момент 300 000 + зарегистрированных участников. Даже если это мечта. Поэтому я могу просто делать то, что мне всегда говорили не делать. Спасибо – xps15z

+0

Нет проблем! Удачи! – aspencer8111

1

Одним из способов достижения этого является добавление возрастной колонны вдоль DOB, введенной пользователями, и триггер, который обновляет все возрасты один раз в день. Вы можете легко индексировать его и запросить с помощью BETWEEN.

0

Я бы сохранил дату рождения в качестве атрибута timestamp, а затем отфильтровал результаты поиска Sphinx в диапазоне от первой и последней дат, которые действительны для возраста/возраста, которым вы пользуетесь.

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

Смежные вопросы