我一直在寻找最好的方法来完成相当一段时间的平庸结果,所以我决定在这里问一下。在Rails中获取最后一条相关记录
的情况如下:我有三个型号,任务,用户和评论,基本上是这样的:
class Task < ActiveRecord::Base
belongs_to :user
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :task
end
class User < ActiveRecord::Base
has_many :tasks
has_many :comments
end
我试图输出任务的清单(假设最后10这个问题的目的),以及相关的最后评论为每个任务和它的作者(用户模型)与最少查询可能。
谢谢
UPDATE:
class Task < ActiveRecord::Base
belongs_to :user
has_many :comments
has_one :last_comment, -> { order 'created_at' }, class_name: "Comment"
end
,然后取这样的评论:
tasks = Task.joins(last_comment: :user)
.includes(last_comment: :user)
.order('tasks.created_at DESC').limit(10).load
因此该解决方案是这样的,我结合由Blue史密斯和harigopal解决方案
其中产生只有一个查询,这正是我是looki ng for!谢谢!
我不认为我的理解正确,所以我发布了有关此评论的进一步解释:这不是我关心的任务限制,数字完全不相关,我试图以某种方式来模拟场景,其中任务只有**一条评论**所以问题是如何**加载最后一条相关评论** –