Ruby on Rails查询:连接表并选择多个列

时间:2014-04-26 05:48:26

标签: mysql sql ruby-on-rails-4

有两种模式:微博和用户

“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")

有人可以帮忙吗?谢谢!

2 个答案:

答案 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进行分组,则没有任何意义,因为一个用户可以拥有多个微博。