我有3个型号:
活动,阵容,艺术家
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
进行排序?
答案 0 :(得分:3)
您可以将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) }
后者可能是更好的选择,因为default_scope有时是considered to be a bad idea。
答案 1 :(得分:1)
我认为您只需将-> { order "artist_order ASC" }
添加到lineups
模型中的Artist
关联
Artist:
has_many :events, through: :lineups
has_many :lineups, -> { order "artist_order ASC" }
现在Event.last.artists
应该为您提供按阵容artist_order
PS: 未经测试。
答案 2 :(得分:1)
您可以在任何关联中添加订单,只需在order
关联前添加lineups
。
has_many :lineups,-> { order(:artist_order) }
检查此http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/ClassMethods/has_many以获取完整参考。