Я предполагаю, что у вас есть две модели - Artist и Event.
Вы хотите иметь отношения habtm между ними, и вы хотите иметь возможность определять порядок событий для каждого исполнителя.
Вот мое решение. Я пишу этот код из моей головы, но подобное решение работает в моем случае. Я почти уверен, что есть место для улучшения.
Я использую плагин rails acts_as_list.
Вот как бы я определил модели:
class Artist < ActiveRecord::Base
has_many :artist_events
has_many :events, :through => :artist_events, :order => 'artist_events.position'
end
class Event < ActiveRecord::Base
has_many :artist_events
has_many :artists, :through => :artist_events, :order => 'artist_events.position'
end
class ArtistEvent < ActiveRecord::Base
default_scope :order => 'position'
belongs_to :artist
belongs_to :event
acts_as_list :scope => :artist
end
Как видите, вам нужна дополнительная модель ArtistEvent, соединяющая две другие. Таблица artist_events должна иметь два внешних идентификатора и дополнительный столбец - положение.
Теперь вы можете использовать методы acts_as_list (к сожалению, в модели ArtistEvent), но что-то вроде
Artist.find (: идентификатор) .events
должен предоставить вам список событий, принадлежащих конкретному исполнителю в правильном порядке.