有两种模式:微博和用户
“microposts”包含4列:name,type,user_id和id
“users”包含4列:名称,类型,地址和ID
Microposts属于用户;用户包含许多微博。
我想找到每个用户有多少个微博,但由于某些原因,我无法让查询正常工作。
我试过的查询是:
User.joins(:microposts).group("users.id").select("users.*, count(microposts.id) as postcount")
这只会从users表中提取属性,但会从微博表中排除列,也会排除我创建的计数列。
出于某种原因,
User.joins(:microposts).group("users.id").count
有效,但只返回user.id和count。我也想拉其他列。
我也尝试使用“includes”而不是“join”,但这只返回users表的所有列,而没有来自microposts表。
User.includes(:microposts).group("users.id").select("users.*, count(microposts.id) as postcount")
有人可以帮忙吗?谢谢!
答案 0 :(得分:3)
我认为你需要joins
和 includes
。
User.joins(:microposts).
includes(:microposts).
group("users.id").
select("users.*, count(microposts.id) as postcount")
答案 1 :(得分:0)
您打算如何使用它?
如果您想循环用户并显示用户属性及其微博,您可以直接执行此操作:
<% @users.each do |user| %>
<%= user.microposts.size %>
<%= other_user_attributes %>
<%= user.microposts.each do |micropost| %>
<%= micropost_attributes %>
<% end %>
<% end %>
P.S。如果您还想要返回微博属性,则可以在选择查询中执行此操作。如果你将microposts.title添加为micropost_title&#39;它也将返回微博标题。但是,如果您根据用户ID进行分组,则没有任何意义,因为一个用户可以拥有多个微博。