有没有办法,使用DataMapper :: Query :: Conditions和DataMapper :: Query :: Direction对象结构,根据计算值设置WHERE子句条件和/或ORDER BY子句?
在我们的用户模型中,我们有两个日期字段。我们的用户已要求按这两个日期之间的年数过滤和排序。由于速度问题,以及结果在数据库级别进行分页这一事实,此计算需要在数据库中完成,而不是一旦结果返回到RoR服务器。
我在Rails控制台中尝试了以下作为概念验证(使用Integer字段):
direction = DataMapper::Query::Direction.new(User.integer_field_2 - User.integer_field_one, :asc)
并出现以下错误:
NoMethodError: undefined method `-' for #<DataMapper::Property::Integer @model=User @name=:integer_field_2>
我宁愿不在直接SQL中编写查询,因为(a)这是作为泛型方法的一部分完成的,用于对(可能)User对象的任何属性进行排序和过滤,以及(b)我们正在尝试保持ORM数据库不可知(虽然目前使用PostgreSQL,所以虽然它是最后的选择,但它是一个选项)。
非常感谢任何帮助,即使它是“对不起,但直接的SQL是唯一的方法。”感谢。