我使用Ruby on Rails和Postgres,我有三个表:Event,Speaker和Event_Speaker(其中最后一个启用Event和Speaker之间的双向has_many, through
关系。)
在个别发言者的show
视图中,我不仅试图显示所有具有该发言者的事件,还试图显示仅有该发言者的事件数量(相对于与该演讲者以及一个或多个其他人合作的活动。
我似乎无法想出能够完成后一部分的ActiveRecord查询。有什么想法吗?
答案 0 :(得分:2)
所以基于Mauricio Moraes'给出答案。评价。
移植
def change
add_column :events, :speakers_count, :integer, default: 0
end
模型
class EventSpeaker
belongs_to :event, counter_cache: :speakers_count
belongs_to :speaker
end
所以现在你可以做一个简单的查询
speaker = Speaker.first
only_speaker_events = speaker.events.where(speakers_count: 1)
答案 1 :(得分:1)
使用select
怎么样?从数据库加载扬声器的所有事件,然后拒绝任何具有多个扬声器的事件。
speaker.events.select { |e| e.speakers.count == 1 }