如何从 rails 中的多对多丰富关联中检索已排序的条目?

How to retrieve sorted entries from many-to-many rich association in rails?

假设我在队列和花花公子之间有一个多对多的丰富关联:

队列:

has_many in_queue_positionings
has_many dudes, through: in_queue_positionings

伙计:

has_many in_queue_positionings
has_many queues, through: in_queue_positionings

InQueuePositioning 在 table 和

中有 position

scope :sorted, lambda { order('BY position ASC') } 在模型中定义。假设我总是需要访问按 positions.

排序的 queue.dudes

我可以这样访问帅哥:

queue.in_queue_positionings.sorted.each { |pos| pos.dude }

但是这个方法很丑(而且可能也很慢)。那么如何优雅高效的解决这个问题呢?

试试这个:

queue.dudes.order('in_queue_positionings.position')

我们的应用程序中有以下内容:

Grant:
has_many :programs, dependent: :destroy
has_many :klasses, through: :programs

Program:
has_many :klasses, dependent: :destroy

以及以下作品:

grant.klasses.order('programs.name desc')

并且它避免了N+1

  1. 不应该使用 Queue 因为它可能与 Queue 冲突 Thread
  2. 我不确定我们是否可以在 has_many 关联中使用范围,但您可以 试试这个

InQueuePositioning

class InQueuePositioning < ...
  belongs_to :queue
  belongs_to :dude
end

队列

class Queue < ActiveRecord::Base
  has_many :in_queue_positionings, ->{order("position ASC")}
  has_many :dudes, through: :in_queue_positionings
end

并称之为

queue.dudes