You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to rubyonra...@googlegroups.com
I have the following setup:
class Unit has_many :reports end
class Report belongs_to :unit end
Basically I have a list of units and I want to select the last report for each unit (based on time) and order the resulting last reports by longitude.
Sounds simple, but my implementation looks like this:
units = current_user.accessible_units report_ids = [] if units.size > 0 units.map(&:id).uniq.each do |id| report = Report.select(:id).where(unit_id: id).order("time desc").limit(1) if !report.empty? report_ids << report.try(:first).try(:id) end end end reports = Report.where(id: report_ids).order("longitude desc")
Is there a way to perform this same query using sql (active record relations) and minimize the use of ruby iterators, like map and each? Also notice in query above, I make two hits to the database by querying reports for time and then descending order. Is there a way to eliminate that too?