如何避免在关联模型的查询中两次触发(Rails)?

时间:2019-04-13 16:53:10

标签: ruby-on-rails ruby-on-rails-5

Schema: User
id
name string(255)

Schema: Post
id
user_id
title string(255)

在控制器中,我正在查询与Userhas_many关系的Post 这就是我在控制器中所做的

@users = User.posts.where('title = ?','April Contest').group(:id)

现在在视图文件中,我正在遍历@users。对于每个user,我需要获取满足title ='April Contest'的帖子。对于我来说,做到这一点似乎需要再次查询。

这是我的观点:

@users.each do |user|
  A LOT OF  HTML THAT DISPLAYS DATA OF USER
 user.posts.where('title = ?','April Contest').each do |post|
    SOME HTML THAT DISPLAYS DATA OF POST
 end
end

请帮助我避免在视图文件中使用此user.posts.where('title = ?','April Contest')

2 个答案:

答案 0 :(得分:1)

尝试一下

首先获得用户,包括标题=“四月竞赛”的帖子

@users = User.includes(:posts).where("posts.title = ?",'April Contest').references(:post)

现在看来,您可以使用@users进行迭代并从user.posts获取帖子

@users.each do |user|
  A LOT OF  HTML THAT DISPLAYS DATA OF USER
 user.posts.each do |post|
    SOME HTML THAT DISPLAYS DATA OF POST
 end
end

这避免了在视图中再次运行查询。试试这个,让我知道

答案 1 :(得分:1)

尝试使用eager_load

@users = User.eager_load(:posts).where("posts.title = ?",'April Contest')

Eager_load使用LEFT OUTER JOIN在单个查询中加载所有关联。

现在,您无需额外查询即可访问帖子