结合ActiveRecord :: Relations

时间:2018-09-17 02:36:48

标签: ruby-on-rails ruby rails-activerecord geokit

我正在从ActiveRecord::Relations方法GeoKit-Rails返回一系列in_range。我想将所有这些结合起来,以便它们可以在控制器动作中作为对象数组返回。

代码:

def find_panels_within_radius_of_poi(min_range, max_range, points_of_interest)
  panels = Array.new
  points_of_interest.each do |poi_id|
    poi = PointOfInterest.find(poi_id)
    panels << Panel.in_range(min_range..max_range, :origin => poi.origin)
  end


  panels.each do |panel|
    puts panel
  end
  panels
end

当前代码为我提供了ActiveRecord::Relations的数组,如下所示:

[
  #<ActiveRecord::Relation []>,
  #<ActiveRecord::Relation []>,
  #<ActiveRecord::Relation [#<Panel id: "00c077c8-047d-4cd7-8c24-5ca96f5bf9fa", geopath_panel_id: nil, plant_unit_id: "1307", structure_id: nil,....
]

如何合并这些?我知道有一个ActiveRecord::Relation Merge方法,但是先检索第一个项目然后将后续项目merged放入其中看起来会很混乱。有没有一种功能上可以实现的方式,例如我可以使用Elixir's Reduce Method来实现的方式。

编辑:

我目前的工作代码(如下),尽管我认为我应该能够执行与Andrey Deineko所建议的类似的操作。

  def find_panels_within_radius_of_poi(min_range, max_range, points_of_interest)    
    panels = Array.new
    points_of_interest.each do |poi_id|
      poi = PointOfInterest.find(poi_id)
      panels << Panel.in_range(min_range..max_range, :origin => poi.origin)
    end
    panels.flatten
  end

0 个答案:

没有答案