Datamapper:通过关联对结果进行排序

2024-03-14

我正在开发一个使用 Datamapper 作为其 ORM 的 Rails 3.2 应用程序。我正在寻找一种按关联模型的属性对结果集进行排序的方法。具体来说我有以下型号:

class Vehicle
  include DataMapper::Resource

  belongs_to :user
end

class User
  include DataMapper::Resource

  has n, :vehicles
end

现在我希望能够查询车辆并按驾驶员姓名对它们进行排序。我尝试了以下方法,但似乎都不适用于 Datamapper:

> Vehicle.all( :order => 'users.name' )
ArgumentError: +options[:order]+ entry "users.name" does not map to a property in Vehicle

> Vehicle.all( :order => { :users => 'name' } )
ArgumentError: +options[:order]+ entry [:users, "name"] of an unsupported object Array

现在我正在使用 Ruby 对查询后的结果集进行排序,但显然这对性能没有任何帮助,而且它还阻止我在其他范围上进一步链接。


我花了更多时间进行挖掘,终于找到了一个旧博客,它可以解决这个问题。它涉及在 DataMapper 中手动构建排序查询。

From: http://rhnh.net/2010/12/01/ordering-by-a-field-in-a-join-model-with-datamapper http://rhnh.net/2010/12/01/ordering-by-a-field-in-a-join-model-with-datamapper

def self.ordered_by_vehicle_name direction = :asc
  order = DataMapper::Query::Direction.new(vehicle.name, direction)
  query = all.query
  query.instance_variable_set("@order", [order])
  query.instance_variable_set("@links", [relationships['vehicle'].inverse])
  all(query)
end

这将使您可以通过关联进行排序,并且仍然链接到其他范围,例如:

User.ordered_by_vehicle_name(:desc).all( :name => 'foo' )

这有点hacky,但它至少做了我想要它做的事情;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Datamapper:通过关联对结果进行排序 的相关文章

随机推荐

  • Javascript:添加动态方法的更好方法?

    我想知道是否有更好的方法向现有对象添加动态方法 基本上 我试图动态地组装新方法 然后将它们附加到现有函数中 该演示代码有效 builder function fn methods method builder for p in method
  • 加载 JSON 文件时出现内存错误

    当我加载 500Mo 大的 JSON 文件时 Python 和间谍程序 返回 MemoryError 但我的电脑有 32Go RAM 当我尝试加载它时 spyder 显示的 内存 从 15 变为 19 看来我应该有更多的空间 有什么我没想到
  • 将网络抓取的响应保存为 csv 文件

    我从网站下载了一个文件rvest 如何将回复另存为csv file Step 1 猴子补丁rvest像这个线程中的包 如何在 Rvest 包中提交登录表单 不带按钮参数 https stackoverflow com questions 3
  • 如何在silverlight3.0中播放Youtube视频

    我正在开发一个 silverlight 应用程序 我想在其中播放 youtube 视频 任何建议请 可供参考的任何示例或任何链接 提前致谢 这里有一个关于这个问题的有趣主题 其中包含 SL 3 0 beta 中的一些示例 http silv
  • 在简单的 main() 中获取rawinputdata

    我正在尝试使用简单的 C 技术和 Windows 从操纵杆读取值 我的目标是编写一个程序 每当操纵杆信号超过预定义阈值时 该程序就会发送键盘命令 键盘命令将由当时处于活动状态的窗口拾取 我的 C 编码技能有限 因此我希望以最简单的方式完成此
  • 如何将 Tomcat 重写阀添加到 Spring Boot 2.0 应用程序

    我正在尝试在 Spring Boot 应用程序中使用 Tomcat 重写阀 但是无法确定将 rewrite conf 放在哪里才能成功加载 我将 Spring Boot 2 0 3 RELEASE 与 Tomcat 8 5 31 一起使用
  • 以编程方式更改图像分辨率

    我计算过 如果我希望生成的图像为 A4 尺寸 600dpi 用于打印目的 则需要为 7016x4961px 72dpi 所以 我以编程方式生成它 然后在 Photoshop 中测试它 它似乎很好 所以如果我调整它的大小 它会获得正确的大小和
  • 如何让FlatList充满高度?

    import React from react import SafeAreaView KeyboardAvoidingView FlatList View Text TextInput Button StyleSheet from rea
  • 配置 grunt 复制任务以排除文件/文件夹

    我已经安装了 grunt 任务grunt contrib copy 我把它嵌入到我的Gruntfile js并通过加载任务grunt loadNpmTasks grunt contrib copy 目前 我使用以下配置来创建一个包含 js
  • 类在需要新实例的地方保留以前的内容

    我定义了一个类 以及一个创建该类实例的函数 我认为这个函数应该每次都创建一个新实例 然而 它看起来像是 继承 了上次调用的内容 任何人都可以解释一下吗 谢谢 class test a def b self x self a append x
  • iframe shimming 或 ie6(及更低版本)选择 z-index 错误

    嗯 不知道有没有人遇到过这个问题简要说明是关于 IE6 的任何
  • constexpr 和奇怪的错误

    我有 constexpr bool is concurrency selected const return ConcurrentGBx gt isChecked GBx is a groupbox with checkbox 我收到错误
  • Backbone.js 事件处理程序命名的最佳实践

    假设我在视图中有一个函数 当某种状态发生更改时会触发该函数 最好给它起什么名字 为什么 状态改变 状态改变 状态改变时 状态改变时 我个人更喜欢使用onEventName名称保持 DOM 事件处理程序的本机命名约定 Like myEleme
  • 如何将Javascript的window.find限制为特定的DIV?

    是否可以在 Safari Firefox Chrome 中使用 Javascript 在特定的 div 容器中搜索给定的文本字符串 我知道你可以使用window find str 搜索整个页面 但是否可以将搜索区域限制为仅在 div 内 T
  • IntelliJ Idea groovy.lang.GroovyRuntimeException:模块版本冲突

    我的 Maven 构建很好 并且能够从 cli 运行 groovy 但是 如果我尝试在 IntelliJ Idea 版本 15 社区版 中运行我的 groovy 类 则会出现以下错误 Exception in thread main jav
  • PyTorch 中的截断反向传播(代码检查)

    我正在尝试在 PyTorch 中实现随时间截断的反向传播 对于以下简单情况K1 K2 我下面有一个实现可以产生合理的输出 但我只是想确保它是正确的 当我在网上查找 TBTT 的 PyTorch 示例时 它们在分离隐藏状态 将梯度归零以及这些
  • 使用命令行参数从 C# 执行 PowerShell 脚本

    我需要从 C 中执行 PowerShell 脚本 该脚本需要命令行参数 这是我到目前为止所做的 RunspaceConfiguration runspaceConfiguration RunspaceConfiguration Create
  • 与显式声明为“ImplicitlyUnwrappedOptional”类型的不可变对象的可选绑定会生成“Optional”类型的不可变对象

    背景 当我解释以下问题中的逻辑错误时 如何使用guard语句来检测赋值后的nil https stackoverflow com a 36303241 4573247 我偶然发现了一个我自己无法解释的特性 详细信息和问题 如上面的线程所示
  • 在 VS Code 中找不到 Julia 包

    我对 vscode 很陌生 之前一直使用 jupyter 笔记本 问题是 当我尝试在 VS Code 中运行 julia 时 它找不到任何已随 jupyter 安装的软件包 我是否必须重新安装所有内容 或者有什么方法可以解决这个问题 Jul
  • Datamapper:通过关联对结果进行排序

    我正在开发一个使用 Datamapper 作为其 ORM 的 Rails 3 2 应用程序 我正在寻找一种按关联模型的属性对结果集进行排序的方法 具体来说我有以下型号 class Vehicle include DataMapper Res