我有Event
模型。它has_many :participants
。如何獲取所有模型實例中的所有has_many對象?
可以做Event.all.each do |event|
,然後試圖操縱event.participants
但有更簡單的方式來獲得所有事件的所有參與者?
這是OO中的一個典型問題,當您使用正確的方法獲取「事件」數組而不是EventArray時。
我有Event
模型。它has_many :participants
。如何獲取所有模型實例中的所有has_many對象?
可以做Event.all.each do |event|
,然後試圖操縱event.participants
但有更簡單的方式來獲得所有事件的所有參與者?
這是OO中的一個典型問題,當您使用正確的方法獲取「事件」數組而不是EventArray時。
你可以得到Participants
是任何Event
喜歡的部分原因
Participant.where(event_id: Event.pluck(:id))
或只是
Participant.all
如果沒有Participants
沒有關聯Event
Participant.joins(:event)
應該讓你的所有一個事件的參與者。
Event.joins(:participants).select("participants.*")
這會給出一個與事件
相關的,你可以在這個問題上使用eager_load
和group_by
所有參與者。在你的情況下
event = Event.eager_load(:participants).group_by(&:participants)
它會創建一個與相關參與者的所有事件的散列。您可以訪問參與者的0索引和該事件的1個索引。類似於
event.first[0] = all the participants of that event
event.first[1] = that event