Я предполагаю, что у вас есть две модели — Artist и Event.
Вы хотите, чтобы между ними была связь, и вы хотите иметь возможность определять порядок событий для каждого артиста.
Вот мое решение. Я пишу этот код из головы, но подобное решение работает в моем случае. Я почти уверен, что есть возможности для улучшения.
Я использую плагин rails act_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 должна иметь два внешних id и дополнительный столбец — position.
Теперь вы можете использовать методы act_as_list (к сожалению, на модели ArtistEvent), но что-то вроде
Artist.find(:id).events
должен дать вам список событий, принадлежащих конкретному художнику, в правильном порядке.
person
Community
schedule
16.02.2010