假设在队列和对象之间有一个多对多的富关联:
队列: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 }
但是这个方法很难看(而且可能很慢)。那么如何才能优雅而高效地解决这个问题呢?
- 不应该使用
Queue
,因为它可能与Queue
冲突Thread
- 我不确定我们可以在
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