Combine ActiveRecord :: Отношения - PullRequest
       33

Combine ActiveRecord :: Отношения

0 голосов
/ 17 сентября 2018

Я возвращаю серию 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 .

Edit:

Мой текущий рабочий код (ниже), хотя я думаю, что смогу сделать что-то похожее на то, что предлагает Андрей Дейнеко .

  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
...