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?

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/dcd64657-0231-4d6a-ad24-6eab7466a493%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to