【问题标题】:Ruby on Rails Query: Joining tables and selecting multiple columnsRuby on Rails 查询:连接表并选择多个列
【发布时间】:2014-04-26 05:48:26
【问题描述】:

有两种模式:微博和用户

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

“用户”包含 4 列:名称、类型、地址和 ID

微博属于用户; users 包含许多微博。

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

我尝试的查询是:

User.joins(:microposts).group("users.id").select("users.*, count(microposts.id) as postcount")

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

由于某种原因,

User.joins(:microposts).group("users.id").count

有效,但它只返回 user.id 和计数。我也想拉其他列。

我也尝试使用“includes”而不是“joins”,但这只会返回 users 表的所有列,而 microposts 表中没有。

User.includes(:microposts).group("users.id").select("users.*, count(microposts.id) as postcount")

有人可以帮忙吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

    你需要joins includes,我想。

    User.joins(:microposts).
      includes(:microposts).
      group("users.id").
      select("users.*, count(microposts.id) as postcount")
    

    【讨论】:

      【解决方案2】:

      你打算如何使用它?

      如果你想遍历用户并显示用户属性和微博,你可以这样做:

      <% @users.each do |user| %>
        <%= user.microposts.size %>
        <%= other_user_attributes %>
      
        <%= user.microposts.each do |micropost| %>
          <%= micropost_attributes %>
        <% end %>
      <% end %>
      

      附:如果您还希望返回 micropost 属性,您可以在您的选择查询中执行此操作。如果您添加“microposts.title as micropost_title”,它也会返回微博标题。但是,如果您根据用户 ID 进行分组,那将毫无意义,因为一个用户可以拥有多个微博。

      【讨论】:

      • 感谢您的回复。我想创建一个实例变量,该变量具有按用户 ID 计算的微博数。我需要这个在视图文件中创建几个表。有没有办法修改查询以将计数作为一列?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2011-05-10
      • 2016-07-04
      • 1970-01-01
      • 2014-05-23
      • 2012-05-10
      相关资源
      最近更新 更多