Пользователь:
has_and_belongs_to_many :playlists
Плейлист:
has_and_belongs_to_many :users
has_and_belongs_to_many :songs
Песня:
has_and_belongs_to_many :playlists
Затем вам нужно создать таблицы соединений между моделями. Важно явным образом исключить идентификатор следующим образом:
create_table :users_playlists, :id => false do |t|
t.integer :user_id, :playlist_id
end
// Редактировать
Вы также можете создать таблицу для пользователей, которые должны иметь права на редактирование:
Добавить в плейлист:
has_and_belongs_to_many :editor_users, :class_name => 'User', :foreign_key => 'user_id'
А это для пользователя:
has_and_belongs_to_many :editable_playlists, :class_name => 'Playlist', :foreign_key => 'playlist_id'