我有两个ActiveRecord模型:用户和课程。其中包含以下内容:
class User < ActiveRecord::Base
has_many :courses
end
class Course < ActiveRecord::Base
belongs_to :user
end
现在我的问题是:我怎样才能获得每个用户的最后一个课程?
我试过以下:
courses = Array.new
User.find_each { |u| courses << u.courses.last }
但我对它的表现表示怀疑。所以寻找性能良好的最佳解决方案。
提前致谢。
答案 0 :(得分:1)
要获得每个用户的最后一个课程,您可以这样做:
courses = []
User.includes(:courses).find_each { |u| courses << u.courses.last }
答案 1 :(得分:1)
我仍然认为接受2个查询可能更容易。但在我决定在2个查询中执行此操作之前,我找到了我看过的文章。这有效,但它增加了相当多的复杂性。
答案 2 :(得分:1)
在2个请求中:
User.select(:id).includes(:courses).each { |u| u.courses.last }
如果您的牌桌太大,不起作用
答案 3 :(得分:1)
使用1个SQL查询的另一种方法
Course.all.group_by(&:user_id).map { |_k,courses| courses.last }
答案 4 :(得分:-2)
就像你可以找到用户的最后一门课程
User.find(1).courses.order(name: :ASC).last
如果你想拥有一个数组:
courses = []
User.each do |u|
courses << u.courses.order(name: :ASC).last
end