ruby datamapper - 如何保存查询

时间:2012-02-16 16:48:57

标签: sinatra datamapper

我有一个模型用户,其名称,年龄,性别作为属性。用户可以使用以下标准查询年龄和性别。如何保存此查询。一种方法是将其转换为age =>年龄1和年龄2之间和性别=> 'M'并将此查询保存在一个包含用户ID和查询字符串以及查询名称的表中。 什么是这样做的好方法..如果我必须使用这个查询来找出未来还有谁适合这个角色(比如别人会保存一个查询,我需要找到我适合的查询)在我的年龄和性别..基本上我需要能够将我的年龄和性别与保存的查询/选择标准相匹配) 我正在使用sinatra作为模型

感谢

1 个答案:

答案 0 :(得分:0)

我喜欢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)

您正在从已注册系统的所有人中进行选择,并且您为每个相关属性添加了一个标准。结果将是不关心最小年龄(want_age_min为空)或最小年龄小于或等于候选人年龄的人。所有属性都是一样的。

这样,“保存的查询”只是一行,其中列指定了条件。然后你可以在所有情况下使用这一个查询。