从数组中获取更具体的数组 - Ruby

时间:2017-03-25 13:26:47

标签: ruby-on-rails arrays ruby

我有这个数组:

[[#<Ticket:0x007f993e368538 id: 400, attendee_id: 436, ticket_type_id: 29, purchase_id: 10>,
  #<Ticket:0x007f993e3683f8 id: 401, attendee_id: 437, ticket_type_id: 29, purchase_id: 10>],
 [#<Ticket:0x007f993e56af20 id: 407, attendee_id: 443, ticket_type_id: 29, purchase_id: 11>,
  #<Ticket:0x007f993e56ade0 id: 408, attendee_id: 444, ticket_type_id: 29, purchase_id: 11>,
  #<Ticket:0x007f993e56aca0 id: 409, attendee_id: 445, ticket_type_id: 29, purchase_id: 11>],
 [#<Ticket:0x007f993dc7db60 id: 415, attendee_id: 451, ticket_type_id: 29, purchase_id: 12>,
  #<Ticket:0x007f993dc7da20 id: 416, attendee_id: 452, ticket_type_id: 29, purchase_id: 12>,
  #<Ticket:0x007f993dc7d8e0 id: 417, attendee_id: 453, ticket_type_id: 29, purchase_id: 12>,
  #<Ticket:0x007f993dc7d7a0 id: 418, attendee_id: 454, ticket_type_id: 29, purchase_id: 12>,
  #<Ticket:0x007f993dc7d660 id: 419, attendee_id: 455, ticket_type_id: 29, purchase_id: 12>],
 [#<Ticket:0x007f993dde8c98 id: 423, attendee_id: 459, ticket_type_id: 33, purchase_id: 13>,
  #<Ticket:0x007f993dde8ae0 id: 424, attendee_id: 460, ticket_type_id: 33, purchase_id: 13>,
  #<Ticket:0x007f993dde89a0 id: 425, attendee_id: 461, ticket_type_id: 33, purchase_id: 13>]]

我用这段代码得到了它:event.purchases.collect(&:tickets)

现在我有了那个数组,我想获得一个只有ticket_type_id值的数组。所以看起来应该是[29, 29, 29, 29, 29, 29, 29, 29, 33, 33, 33]

希望这是足够的信息。

2 个答案:

答案 0 :(得分:3)

试试这个

event.purchases.flat_map(&:tickets).map(&:ticket_type_id)

mapcollect

类似

但它有可能在SQL中做所有通常更好的事情。这样的事情应该有效

Ticket.joins(:purchase).where(purchases: { event_id: event.id }).pluck(:ticket_type_id)

答案 1 :(得分:2)

如您在其他相关问题中所述,如果您在Event中添加关联:

has_many :tickets, through: :purchases

获得属于此活动的所有购买门票event.tickets看起来更干净。

否则,map是Ursus回答的解决方案。