ruby datamapper - как сохранить запрос - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть пользователь модели с именем, возрастом, полом в качестве атрибутов.Пользователь может запросить по следующим критериям возраст и пол.как сохранить этот запрос.Одним из способов было бы преобразовать его в age => между age1 и age2 и sex => 'M' и сохранить этот запрос в таблице с идентификатором пользователя, строкой запроса и именем для запроса.что было бы хорошим способом сделать это ... если я должен использовать этот запрос, чтобы выяснить, кто еще будет в этой роли в будущем (скажем, кто-то еще сохранил бы запрос, и мне нужно найти, чьи запросы я бы вписал в основена мой возраст и пол .. в основном мне нужно, чтобы иметь возможность сопоставить свой возраст и пол с сохраненными критериями запроса / выбора) Я использую sinatra для модели

спасибо

1 Ответ

0 голосов
/ 16 февраля 2012

Мне нравится DataMapper, но бывают случаи, когда лучше просто написать SQL для решения вашей проблемы, а затем позволить DataMapper сделать часть работы за вас.Я обычно использую DataMapper для относительно простых запросов и прибегаю к старому доброму SQL, когда все усложняется.

В вашем случае команда SQL будет выглядеть так:

SELECT * FROM people
WHERE (want_age_min IS NULL OR age >= want_age_min)
AND (want_age max IS NULL OR age <= want_age_max)
AND (want_sex IS NULL OR want_sex = my_sex)

You 'Вы выбираете из всех людей, уже зарегистрированных в системе, и вы добавляете один критерий для каждого соответствующего атрибута.Результатом будут люди, которые либо не заботятся о минимальном возрасте (want_age_min равен нулю), либо минимальный возраст меньше или равен возрасту кандидата.И то же самое для всех атрибутов.

Таким образом, «сохраненный запрос» представляет собой просто строку со столбцами, указывающими условия.Тогда вы можете использовать этот запрос для всех случаев.

...