Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按Rails中的临时列字段排序ActiveRecord关系_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 按Rails中的临时列字段排序ActiveRecord关系

Ruby on rails 按Rails中的临时列字段排序ActiveRecord关系,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,我需要在ActiveRecord::Relation对象中,通过运行时计算的值,对Profile项进行查询 我已使用attr\u访问器在我的控制器中为关系对象创建并分配了一个临时列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

我需要在
ActiveRecord::Relation
对象中,通过运行时计算的值,对
Profile
项进行查询

我已使用
attr\u访问器在我的控制器中为
关系
对象创建并分配了一个临时列
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方法对
关系进行排序时,我得到一个
没有这样的列:distance
错误,即它没有拾取临时字段

下面是我如何在我的控制器中订购它的(注意,我使用的是
将分页
gem,但这与此无关)


您已将“距离”属性添加到纵断面实例中。所以距离的东西都在ruby中,sql对此一无所知。因为您是在用ruby计算距离,所以需要用ruby对它们进行排序。您可以使用sort_by方法

@profiles.sort_by{|p| p.distance}
或者,您可以将距离计算推送到sql中。类似于下面的内容

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

在这里,您可以看到计算距离列已添加到select中,它告诉active record更改查询。

非常有效,谢谢!sort_by方法非常有效,谢谢!另一方面,为了使用数组对象获得
will\u paginate
,我必须添加一个require语句
@profiles = Profile.select('*, 10 as distance').order('distance')