[英]How to get all has_many objects in all model instances?
I have the Event
model. 我有Event
模型。 It has_many :participants
. 它有很多has_many :participants
。
Can do Event.all.each do |event|
可以做Event.all.each do |event|
and then try to manipulate event.participants
然后尝试操纵event.participants
But is there an easier way to get all participants for all events? 但有没有更简单的方法让所有参与者参加所有活动?
It's a typical problem in OO when you get an Array of "Events" back not an EventArray with the right methods. 当你使用正确的方法得到一个“事件”数组而不是一个EventArray时,这是OO中的一个典型问题。
You can get Participants
that are part of any Event
like this 您可以获得属于此类Event
Participants
Participant.where(event_id: Event.pluck(:id))
or just 要不就
Participant.all
if there are no Participants
without an associated Event
如果没有没有相关Event
Participants
Participant.joins(:event)
应该让你参与一个活动。
Event.joins(:participants).select("participants.*")
这将为所有与事件相关联的参与者提供
you can use eager_load
and group_by
in this issue. 您可以在此问题中使用eager_load
和group_by
。 In your case 在你的情况下
event = Event.eager_load(:participants).group_by(&:participants)
it will create a Hash of all events with associated participants. 它将创建一个包含相关参与者的所有事件的哈希。 you can access 0 index for participants and 1 index for that event. 您可以访问参与者的0索引和该事件的1个索引。 Something like 就像是
event.first[0] = all the participants of that event
event.first[1] = that event
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.