我有这个数组:
[[#<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]
希望这是足够的信息。
答案 0 :(得分:3)
试试这个
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)
答案 1 :(得分:2)
如您在其他相关问题中所述,如果您在Event
中添加关联:
has_many :tickets, through: :purchases
获得属于此活动的所有购买门票event.tickets
看起来更干净。
否则,map
是Ursus回答的解决方案。