根据关联的属性将一条记录拆分为两条

时间:2013-07-06 17:41:50

标签: ruby-on-rails ruby

假设我有一个包含许多票证的模型列表,票证有statuson_saleordered)。现在我想要查询列表,如果它的票据有不同的status,我想把它分成两个记录。

例如,有1个列表有5张票,其中3个statuson_sale,其中两个是ordered,我想要获得1个列表,其中有3张票其status(列表中还有status)是on_sale,1个列表中有2个门票,列表的状态为ordered

这一点是根据协会的状态将1条记录拆分为两条。

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

SQL(通过Arel)

sale_listings = Listing.joins(:tickets).where("tickets.status = 'on_sale'")
ordered_listings = Listing.joins(:tickets).where("tickets.status = 'ordered'")

这两个例子都是未经测试的(即我在将它们放在这里之前没有尝试过)并且可以进行优化。