我需要通过在运行时计算的值来命令查询Profile
对象中的ActiveRecord::Relation
条目。
我已使用distance
为Relation
对象在控制器中创建并分配了一个临时列attr_accessor
,如下所示:
@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
但是,当我尝试使用订购方法订购Relation
时,我收到no such column: distance
错误,即它没有取回临时字段。
以下是我尝试在控制器中订购的方式(请注意我使用will_paginate
gem,但这是无关紧要的。)
@profiles = @profiles.order('distance ASC').paginate(page: params[:page])
答案 0 :(得分:2)
您已将距离属性添加到配置文件实例。所以距离的东西都是红宝石,而sql对此一无所知。由于你在计算红宝石的距离,你需要在红宝石中订购它们。您可以使用sort_by方法。
@profiles.sort_by{|p| p.distance}
或者你可以将距离计算推送到sql中。类似于以下内容
@profiles = Profile.select('*, 10 as distance').order('distance')
在这里,您可以看到计算距离列已添加到选择中,该列告知活动记录更改查询。