目前我正在收到25篇最新帖子
posts = Post.where(public: true).limit(25).order(created_at: :desc)
当我渲染它时,我使用了包含
render :json => posts.as_json(:include => [:user])
这是为了让发帖的用户发送它,即:
{
"id": 43,
"title": "asdfasdfs",
"story": "adfaf sdf sd asdf sdf asdf saf adf",
"created_at": "2017-05-10T22:40:54.587Z",
"user": {
"id": 4,
"first_name": "heelo",
"last_name": "heelo",
}
看起来效果很好,但在查看控制台时。它制作了26个查询,一个用于获取帖子,
SELECT "posts".* FROM "posts" WHERE (public = true) ORDER BY "posts"."created_at" DESC LIMIT ? [["LIMIT", 25]]
还有25个以获取每个帖子的用户
SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", XXX], ["LIMIT", 1]]
获取其用户。在某种程度上,我可以做一个联接,以避免再增加25个查询。我试过了
posts = Post.joins(:user).where(public: true).limit(25).order(created_at: :desc)
但似乎没有做任何事情。 有什么建议吗?
答案 0 :(得分:1)
尝试使用includes
将其缩减为仅两个查询。
posts = Post.includes(:user).where(public: true).limit(25).order(created_at: :desc)
这将查询一个查询中的最后25个帖子以及另一个查询中的所有关联用户。