首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails查询:连接表和选择多列

问Rails查询:连接表和选择多列
EN

Stack Overflow用户
提问于 2014-04-26 05:48:26
回答 2查看 5.5K关注 0票数 3

有两种模式:微博和用户。

“micropost”包含4列:名称、类型、user_id和id

"users"包含4列:名称、类型、地址和id

微博属于用户,用户包含许多微博。

我想知道每个用户有多少微博,但由于某种原因,我无法让查询正常工作。

我尝试的查询是:

代码语言:javascript
复制
User.joins(:microposts).group("users.id").select("users.*, count(microposts.id) as postcount")

这只从users表中提取属性,但从micropost表中排除这些列,也不包括我创建的count列。

出于某种原因,

代码语言:javascript
复制
User.joins(:microposts).group("users.id").count

工作,但它只返回user.id和计数。我也想拉其他的柱子。

我还尝试使用“include”而不是"joins",但这只会返回users表的所有列,而micropost表中没有返回。

代码语言:javascript
复制
User.includes(:microposts).group("users.id").select("users.*, count(microposts.id) as postcount")

有人能帮忙吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-09-09 17:37:13

我想你需要joins和includes。

代码语言:javascript
复制
User.joins(:microposts).
  includes(:microposts).
  group("users.id").
  select("users.*, count(microposts.id) as postcount")
票数 4
EN

Stack Overflow用户

发布于 2014-04-26 06:21:49

你打算怎么用它?

如果您想遍历用户并同时显示用户属性和微博,您只需这样做:

代码语言:javascript
复制
<% @users.each do |user| %>
  <%= user.microposts.size %>
  <%= other_user_attributes %>

  <%= user.microposts.each do |micropost| %>
    <%= micropost_attributes %>
  <% end %>
<% end %>

附注:如果还希望返回micropost属性,则可以在select查询中这样做。如果你加上“microposts.title as micropost_title”,它也会返回微博标题。但是,如果您根据用户id进行分组,这是没有意义的,因为一个用户可以有多个微站。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23307188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档