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

时间:2015-09-21 16:00:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rails-activerecord

假设我在队列和家伙之间有多对多的关联:

队列:

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 }

但这种方法很丑陋(也可能很慢)。那么如何才能优雅高效地解决这个问题?

2 个答案:

答案 0 :(得分:1)

  1. 不应该使用Queue,因为它可能会与Queue冲突 Thread
  2. 我不确定我们是否可以在has_many关联中使用范围,但您可以 试试这个
  3. 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