从数组中获取更具体的数组 - 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]

希望这是足够的信息。

试试这个

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

map就像collect

但是在SQL中可以做所有通常更好的事情。这样的东西应该有效

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

如您的另一个相关问题所述,如果您在Event中添加关联:

has_many :tickets, through: :purchases

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

否则,map是乌尔苏斯回答的解决方案。

相关内容

  • 没有找到相关文章

最新更新