假设我有一个包含许多票证的模型列表,票证有status
(on_sale
或ordered
)。现在我想要查询列表,如果它的票据有不同的status
,我想把它分成两个记录。
例如,有1个列表有5张票,其中3个status
是on_sale
,其中两个是ordered
,我想要获得1个列表,其中有3张票其status
(列表中还有status
)是on_sale
,1个列表中有2个门票,列表的状态为ordered
。
这一点是根据协会的状态将1条记录拆分为两条。
答案 0 :(得分:2)
如果我理解你,你需要在内存中表示清单模型,但在数据库中不受影响。
您有2个选项,可以在Ruby中执行,也可以在SQL中执行。
sale_listings = []
ordered_listings = []
Listing.all.each do |l|
# assign tickets to their appropriate array
sale_listings << l if l.tickets.any?{|t| t.status == 'on_sale' }
ordered_listings << l if l.tickets.any?{|t| t.status == 'ordered' }
end
sale_listings = Listing.joins(:tickets).where("tickets.status = 'on_sale'")
ordered_listings = Listing.joins(:tickets).where("tickets.status = 'ordered'")
这两个例子都是未经测试的(即我在将它们放在这里之前没有尝试过)并且可以进行优化。