【问题标题】:ruby datamapper - how to save a queryruby datamapper - 如何保存查询
【发布时间】:2012-02-16 16:48:56
【问题描述】:

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

谢谢

【问题讨论】:

  • 这是您想要仅针对这种特殊情况还是针对几个不同的表和字段执行的操作?
  • 我试图使模型简单...但实际上用户与其他表/模型相关联..所以查询可能非常复杂(基于其他表中的字段为不仅仅是年龄和性别)。

标签: sinatra datamapper


【解决方案1】:

我喜欢 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 为空)或最低年龄小于或等于候选人年龄的人。所有属性都一样。

这样,“已保存的查询”只是一行,其中包含指定条件的列。然后,您实际上可以对所有情况使用这一查询。

【讨论】:

  • 但是你可以建立一个查询来看看你是否适合系统中所有用户的查询..
  • 嗯...你的意思是像在约会网站上?您填写表格并希望显示哪些用户会对您感兴趣?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 2017-04-20
相关资源
最近更新 更多