假设我在队列和家伙之间有多对多的关联:
队列:
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') }
。我们假设我始终需要访问按queue.dudes
排序的positions
。
我可以访问这样的家伙:
queue.in_queue_positionings.sorted.each { |pos| pos.dude }
但这种方法很丑陋(也可能很慢)。那么如何才能优雅高效地解决这个问题?
答案 0 :(得分:1)
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
答案 1 :(得分:0)
试试这个:
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