我有Story
模型和Post
模型。每个故事都有很多帖子,每个帖子都属于一个故事。
当我从数据库中将特定故事加载到内存中时,我想热切地加载该故事的最新帖子。我现在就是这样做的:
@story = Story.includes(:posts).find(params[:story_id])
@latest_post = @story.posts.first #Note, story.posts :order => "created_at DESC"
这很有效,但是当我只需要最新的帖子时,将所有故事的帖子加载到内存中似乎不是很有效。有没有办法限制includes
只是急切地加载第一篇文章?我是否应该担心这个?
答案 0 :(得分:1)
使用SQL order by
,join
和limit
。 ActiveRecord
查询将如下所示:
@latest_post = @story.include(:posts).order("created_at DESC").limit(1)
这将创建一个包含帖子的联接,按最新帖子排序,只需获取一个。