Это работает для меня (Rails 4.2)
Применение порядка на сквозной карте не сохраняется, иначе этого недостаточно для упорядочения жанров:
has_many :disk_genre_maps,
-> {order('disk_genre_map.sort_order')},
:inverse_of => :disk,
:dependent => :destroy,
:autosave => true
has_many :genres, # not sorted like disk_genre_maps
:through => :disk_genre_maps,
:source => :genre,
:autosave => true
Поэтому я перезаписываю это для каждого экземпляра:
def genres # redefine genres per instance so that the ordering is preserved
self.disk_genre_maps.map{|dgm|dgm.genre}
end
Чтобы это работало для заданий, это должно быть примерно так (не проверено)
def genres= some_genres
self.disk_genre_maps = some_genres.map.with_index do |genre, index|
DiskGenreMap.new(disk:self, genre:genre, sort_order:index)
end
end