我有三种型号:
活动、阵容、艺术家

class Event
  has_many :lineups
  has_many :artists, -> { uniq }, through: :lineups
end

class Artist
  has_many :events, through: :lineups
  has_many :lineups
end

class Lineup
  belongs_to :event
  belongs_to :artist
end

列队有artist_order整数列。
默认情况下,如何使Event.last.artists按列表的artist_order列排序?

最佳答案

您可以将default_scope用于Lineup模型:

class Lineup
  default_scope { order(:artist_order) } # or order('artist_order DESC')
end

这样,每当调用列队集合时,它都按artist_order列排序。
另一种方法是直接在has_many关系上指定订单:
has_many :lineups, -> { order(:artist_order) }

后者可能是更好的选择,因为默认范围有时considered to be a bad idea

关于ruby-on-rails - 如何在联接模型中按列对关联的模型进行排序(:through),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34991239/

10-10 00:47