我有这个数组:
[[#<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
是乌尔苏斯回答的解决方案。