Postgresql 如何列出一个表的记录,以及通过关系使用多少记录的计数器
我有两张桌子:Postgresql 如何列出一个表的记录,以及通过关系使用多少记录的计数器,postgresql,ruby-on-rails-4,activerecord,postgresql-9.1,rails-postgresql,Postgresql,Ruby On Rails 4,Activerecord,Postgresql 9.1,Rails Postgresql,我有两张桌子: 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 < ActiveR
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
class工具:用户\u仪器
类UserInstrument
如何使用计数器查询所有仪器的使用次数,如:
仪器。选择('name,User\u Instrument.group(:Instrument\u id.count')。全部
或者可能:
UserInstrument.includes(:instruments).group('instrument\u id as count')。选择('instrument.name,count')
这在视图级别起作用,但会创建太多查询:
<% @instruments.each_with_index do |instrument,idx| %>
...
<td><%= instrument.users.count %></td>
...
<%end%>
...
...
如何使用1个查询实现这一点
谢谢如果您只想显示count,那么您可以使用
到一个
方法将其转换为数组,然后对其调用count方法
# Controller
@instruments = Instrument.all.eager_load(:users)
# View
<% @instruments.each do |instrument| %>
<td><%= instrument.users.to_a.count %></td>
<% end %>
#控制器
@instruments=Instrument.all.eager\u加载(:用户)
#看法