需要ActiveRecord查询才能找到具有特定子记录的父级以及其他父级记录

时间:2016-05-23 14:04:35

标签: ruby-on-rails ruby postgresql

我使用Ruby on Rails和Postgres,我有三个表:Event,Speaker和Event_Speaker(其中最后一个启用Event和Speaker之间的双向has_many, through关系。)

在个别发言者的show视图中,我不仅试图显示所有具有该发言者的事件,还试图显示仅有该发言者的事件数量(相对于与该演讲者以及一个或多个其他人合作的活动。

我似乎无法想出能够完成后一部分的ActiveRecord查询。有什么想法吗?

2 个答案:

答案 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 }