如何从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表中有position列,

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

我可以访问这样的家伙:

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

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

  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

try this:

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

最新更新