gpt4 book ai didi

ruby-on-rails - 通过 Rails 中的临时列字段排序 ActiveRecord 关系

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:37 24 4
gpt4 key购买 nike

我需要根据在运行时计算的值对 ActiveRecord::Relation 对象中的 Profile 条目的查询进行排序。

我已经使用 attr_accessor 在我的 controller 中为 Relation 对象创建并分配了一个临时列 distance像这样:

@profiles.each do |p|
p.class_eval do
attr_accessor :distance
end
end

@profiles.each do |p|
p.distance = distance_arr[@profiles.index(p)] # Distance values obtained from an instance array
end

但是,当我尝试使用 order 方法对 Relation 进行排序时,我得到了一个 no such column: distance 错误,即它没有选择临时字段。

这是我尝试在我的 Controller 中对其进行排序的方式(请注意,我使用的是 will_paginate gem,但这无关紧要)。

@profiles = @profiles.order('distance ASC').paginate(page: params[:page])

最佳答案

您已将距离属性添加到配置文件实例。所以距离的东西都在 ruby​​ 中,而 sql 对此一无所知。由于您正在计算 ruby​​ 中的距离,因此您需要用 ruby​​ 对它们进行排序。您可以使用 sort_by 方法。

@profiles.sort_by{|p| p.distance}

或者,您可以将距离计算推送到 sql 中。类似下面的内容

@profiles = Profile.select('*, 10 as distance').order('distance')

在这里您可以看到计算的距离列已添加到选择中,它告诉事件记录更改查询。

关于ruby-on-rails - 通过 Rails 中的临时列字段排序 ActiveRecord 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096681/

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