gpt4 book ai didi

postgresql - 如何列出表的记录以及通过关系使用了多少的计数器

转载 作者:行者123 更新时间:2023-11-29 13:21:10 26 4
gpt4 key购买 nike

我有这两个表:

create_table "instruments", force: :cascade do |t|
t.string "name"
...

create_table "user_instruments", force: :cascade do |t|
t.integer "user_id"
t.integer "instrument_id"
...

有了这些关系:

class Instrument < ActiveRecord::Base

has_many :user_instruments
has_many :users, :through => :user_instruments

class UserInstrument < ActiveRecord::Base

belongs_to :user
belongs_to :instrument

如何查询所有 instruments 以及使用次数的计数器,例如:

Instrument.select('name,User_instrument.group(:instrument_id).count').all

或者也许:

UserInstrument.includes(:instruments).group('instrument_id as count').select('instrument.name, count')

这在 View 级别有效,但它会创建太多查询:

<% @instruments.each_with_index do |instrument,idx| %>
...
<td><%= instrument.users.count %></td>
...
<%end%>

如何用 1 个查询做到这一点?

谢谢

最佳答案

如果你只想显示计数,那么你可以使用to_a方法将其转换为数组,然后在其上调用count方法。

# Controller
@instruments = Instrument.all.eager_load(:users)

# View
<% @instruments.each do |instrument| %>
<td><%= instrument.users.to_a.count %></td>
<% end %>

关于postgresql - 如何列出表的记录以及通过关系使用了多少的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539285/

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