gpt4 book ai didi

sql - 如何使用事件记录计算 has_many 关系?

转载 作者:行者123 更新时间:2023-12-05 02:15:19 25 4
gpt4 key购买 nike

我有一个连接表,其中列出了一个 user_id 和一个 item_id(多对多关系)。

我正在尝试显示用户在 erb 页面上拥有的元素数量。

我该怎么做?

我的连接表/模型 UserItem 现在有 11 条记录,所以显然如果我执行 UserItem.count,它会给我 11。

但是我如何告诉它对于每个 user_id,计算该特定用户有多少个 item_id?然后显然我会对此进行迭代。

编辑:

好的,我发现 UserItem.group(:user_id).distinct.count 返回 {user_id => # of items per user} 的哈希值。

我如何不仅迭代散列,而且使它与每个当前 user_id 相关联?

<% @users.each do |user| %>
<li><%= user.username %>
has been to <%= UserItem.group(:user_id).distinct.count %>!</li>
<% end %>

到目前为止,这只是插入哈希,我如何对应每个 user_id 以使其与它显示的 user.username 对齐?

最佳答案

我假设您通过 UserItemUserItem 之间建立了一个 has_many :through 关联,并且您需要在具有相关项目计数的所有用户的 View 中显示列表。

这是一个选项。

在 Controller 中(按 item_count 排序):

@users = User.joins(:user_items).group('user_items.user_id').select('users.*, COUNT(*) as item_count').order('item_count DESC')

在 View 中(非常基本):

<% @users.each do |user| %>
<p><%= user.name %> | <%= user.item_count %></p>
<% end %>

在我的评论中有一个语法错误,用于计算 @user 的项目,如果 id = @user.id:

UserItem.where(user_id: id).count

**Edit1:** 也显示没有元素的用户。

选项一,在上面的代码中添加以下内容,以获取没有项目的用户:

@users_without_items = User.includes(:items).where(items: {id: nil})

<% @users_without_items.each do |user| %>
<p><%= user.name %> | 0</p>
<% end %>

或者一次全部获取(未排序,触发大量查询):

@user = User.all

<% @user.each do |user| %>
<p><%= user %> | <%= user.categories.count %></p>
<% end %>

**Edit2:** 获取`{user_id => # of items per user}`的散列

一个选项可以是列出所有用户并通过它的键从散列中获取计数:

@user_items_count = UserItem.group(:user_id).count
@users = User.all

<% @users.each do |user| %>
<p><%= user.name %> | <%= @user_items_count[user.id] || 0 %></p>
<% end %>

**在使用 ActiveRecord 和 erb 的 `Rails` 中测试。**

关于sql - 如何使用事件记录计算 has_many 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52139065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com