Ruby on rails rails中有很多到很多的关系问题

Ruby on rails rails中有很多到很多的关系问题,ruby-on-rails,activerecord,has-many,has-and-belongs-to-many,Ruby On Rails,Activerecord,Has Many,Has And Belongs To Many,在我的游戏项目中,我定义了两个模型: class Ticket belongs_to :user belongs_to :game has_and_belongs_to_many :payments, join_table: 'tickets_payments', association_foreign_key: 'transaction_id',

在我的游戏项目中,我定义了两个模型:

class Ticket
  belongs_to :user
  belongs_to :game

  has_and_belongs_to_many :payments, join_table: 'tickets_payments',
                                     association_foreign_key: 'transaction_id',
                                     class_name: 'Transaction'
end
其基本思想是,用户可以看到游戏的门票(我生成10张随机门票,带有游戏id和用户id,但没有付款),当他决定购买时,我为门票创建付款,允许我根据游戏模型上定义的多个关系过滤购买的门票

现在,我的游戏类与用户没有直接关系,所以为了检查有多少玩家买了票,我可以这样做

Game.find(params[:id]).users.size

我认为这应该在逻辑上转化为这样的东西

Game.find(params[:id])。tickets.join(:payments)。map(&:user)。uniq.size

但是,当有多个用户生成票据时,结果会有所不同。在第一种情况下,我看到2个用户(这是错误的,因为其中只有一个用户实际购买了门票),在第二种情况下,我正确地收到1个用户。我可以用其他方法修复它,但它仍然让我困惑,为什么会发生这种情况

从我的研究中我发现

has_many :users, -> { distinct }, through: :paid_tickets
未看到已付款票据中定义的
联接(:付款)
具有多个关系。我可以用任何东西来代替:付款(比如加入(:asdasd)),它会拿走所有的票,但仍然返回2

有人知道为什么会发生这种情况吗?

我想,它被合并到master中,但不在稳定版本中(应该在6.0.3.4中修复)。您可以考虑在这个范围内运行自定义查询以加入现在的事情。

class Game
  has_many :tickets
  has_many :paid_tickets, -> { joins(:payments) }, class_name: 'Ticket' # # inner join would return only tickets that have related payment; if the ticket has related payment, it indicates that it was bought/paid
  has_many :users, -> { distinct }, through: :paid_tickets
end
has_many :users, -> { distinct }, through: :paid_tickets