使用has_many belongs_to association

时间:2016-03-11 10:37:08

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord associations

我有两个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 }

但我对它的表现表示怀疑。所以寻找性能良好的最佳解决方案。

提前致谢。

5 个答案:

答案 0 :(得分:1)

要获得每个用户的最后一个课程,您可以这样做:

courses = []
User.includes(:courses).find_each { |u| courses << u.courses.last }

答案 1 :(得分:1)

我仍然认为接受2个查询可能更容易。但在我决定在2个查询中执行此操作之前,我找到了我看过的文章。这有效,但它增加了相当多的复杂性。

Rails Associations has_one Latest Record

答案 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