Schema: User
id
name string(255)
Schema: Post
id
user_id
title string(255)
在控制器中,我正在查询与User
有has_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')
答案 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在单个查询中加载所有关联。
现在,您无需额外查询即可访问帖子