[英]Rails has_many retrieve all records
# Events
has_many :attendees
# Attendees
belongs_to :event
如何与每个活动的参加者一起访问所有活动?
Event.all.attendees # obviously does not work
为此1个活动,我们可以
Event.find(1).attendees
我们如何为所有活动做到这一点? 是否有一种自动的方法,还是需要循环?
是。 有。 阅读有关AR查询方法的信息。
有两种主要的查看方法:
Event.includes(:attendees)
将加载所有事件,并且是与会者(无论有无)
Event.joins(:attendees)
将选择已分配参加者的那些活动。
使用这两个选项,您都可以使用块来遍历活动的参加者。
请稍作说明。 我确实知道,您可能需要一个结果,可以( 但绝不应该 )通过这种方式实现:
Event.all.map(&:attendees) # would return a collection of attendees.
这样的查询是邪恶的,因为它们在执行之前已完全加载到内存中。
编辑的重点-您实际上将“不需要”任何东西,例如加载一组指定的与会者。
为什么?
因为如果您需要与会者集合,请使用“ Attendee
模型而不是“ Event
或任何其他关联模型进行操作。
这意味着您可以获得一些满足特定条件的事件。
例如:
events = Event.where('start_date > ?' Date.today)
如果您需要参加此活动的与会者,则宁愿这样做
Attendee.where(event_id: events.ids)
然后这个
Event.where('start_date > ?' Date.today).map(&:attendees) #inefficient
我希望我能说清楚。
您可以使用紧急加载在一些SQL查询中检索事件及其关联的与会者:
events = Event.includes(:attendees)
events.each do |event|
event.attendees
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.