gpt4 book ai didi

ruby-on-rails - Datamapper:通过关联对结果进行排序

转载 作者:行者123 更新时间:2023-12-04 12:23:10 24 4
gpt4 key购买 nike

我正在开发一个使用 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 中手动构建排序查询。

发件人: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,但它至少做了我想要它做的事情;)

关于ruby-on-rails - Datamapper:通过关联对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com