如何列出 Table 的记录以及通过关系使用了多少的计数器
How to list records of a Table with a counter of how many are used through a relationship
我有这两个表:
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
如何查询所有工具,以及它被使用的次数的计数器,例如:
Instrument.select('name,User_instrument.group(:instrument_id).count').all
或者也许:
UserInstrument.includes(:instruments).group('instrument_id as count').select('instrument.name, count')
这在视图级别有效,但它创建了太多查询:
<% @instruments.each_with_index do |instrument,idx| %>
...
<td><%= instrument.users.count %></td>
...
<%end%>
如何用 1 个查询做到这一点?
谢谢
如果你只想显示计数,那么你可以使用to_a
方法将其转换为数组,然后在其上调用计数方法。
# Controller
@instruments = Instrument.all.eager_load(:users)
# View
<% @instruments.each do |instrument| %>
<td><%= instrument.users.to_a.count %></td>
<% end %>
我有这两个表:
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
如何查询所有工具,以及它被使用的次数的计数器,例如:
Instrument.select('name,User_instrument.group(:instrument_id).count').all
或者也许:
UserInstrument.includes(:instruments).group('instrument_id as count').select('instrument.name, count')
这在视图级别有效,但它创建了太多查询:
<% @instruments.each_with_index do |instrument,idx| %>
...
<td><%= instrument.users.count %></td>
...
<%end%>
如何用 1 个查询做到这一点?
谢谢
如果你只想显示计数,那么你可以使用to_a
方法将其转换为数组,然后在其上调用计数方法。
# Controller
@instruments = Instrument.all.eager_load(:users)
# View
<% @instruments.each do |instrument| %>
<td><%= instrument.users.to_a.count %></td>
<% end %>