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