如何设置嵌套的多次通过关系以访问祖父模型上的深层嵌套数据?
How do I set up a nested-has-many-through relationship for accessing deeply nested data on the grandfather model?
我有抽奖,有抽奖券,还有买票的人。我想做的是(从抽奖中),看看谁都买票了
简而言之:抽奖有很多票。门票有-很多买家。
我如何实现这种代理/聚合/展平 a has many of a has many?
这有点棘手,因为您需要指定源 class 和源关联,具体取决于您正在设置的关系端口。
参见:
class Raffle < ActiveRecord::Base
has_many :raffle_tickets,
class_name: LineItem::RaffleTicket.name,
foreign_key: 'reference_id'
has_many :ticket_purchasers,
class_name: Buyer.name,
through: :raffle_tickets,
source: :purchasers
end
class LineItem::RaffleTicket < LineItem
belongs_to :raffle, foreign_key: :reference_id
# has_many :buyer_line_items # defined in LineItem
has_many :purchasers,
through: :buyer_line_items,
source: :buyer
end
class BuyerLineItem < ActiveRecord::Base
belongs_to :buyer
belongs_to :line_item # polymorphic
end
这将允许您执行以下操作:
purchasers = Raffle.first.ticket_purchasers
purchasers.map(&:class)
=> [Buyer, Buyer, Buyer, etc...]
以上相当于在抽奖模型上定义如下方法:
def ticket_purchasers
raffle_tickets.map(&:purchasers).flatten
end
我有抽奖,有抽奖券,还有买票的人。我想做的是(从抽奖中),看看谁都买票了
简而言之:抽奖有很多票。门票有-很多买家。
我如何实现这种代理/聚合/展平 a has many of a has many?
这有点棘手,因为您需要指定源 class 和源关联,具体取决于您正在设置的关系端口。
参见:
class Raffle < ActiveRecord::Base
has_many :raffle_tickets,
class_name: LineItem::RaffleTicket.name,
foreign_key: 'reference_id'
has_many :ticket_purchasers,
class_name: Buyer.name,
through: :raffle_tickets,
source: :purchasers
end
class LineItem::RaffleTicket < LineItem
belongs_to :raffle, foreign_key: :reference_id
# has_many :buyer_line_items # defined in LineItem
has_many :purchasers,
through: :buyer_line_items,
source: :buyer
end
class BuyerLineItem < ActiveRecord::Base
belongs_to :buyer
belongs_to :line_item # polymorphic
end
这将允许您执行以下操作:
purchasers = Raffle.first.ticket_purchasers
purchasers.map(&:class)
=> [Buyer, Buyer, Buyer, etc...]
以上相当于在抽奖模型上定义如下方法:
def ticket_purchasers
raffle_tickets.map(&:purchasers).flatten
end