Рельсы много ко многим отношениям и отдаленным отношениям - PullRequest
0 голосов
/ 08 февраля 2012

Предположим, если у нас есть альбом, исполнитель и модель песни в рельсах.

В альбоме:

class Album < ActiveRecord::Base
  has_many :artist_album
  has_many :artist, :through => :artist_album
  has_many :song

В Artistalbum:

class ArtistAlbum < ActiveRecord::Base
  belongs_to :album
  belongs_to :artist
end

В песне:

class Song < ActiveRecord::Base
  has_many :artist_song
  has_many :artists, :through => :artist_song
  belongs_to :album

В исполнителе:

class Artist < ActiveRecord::Base
  has_many :artist_song
  has_many :song, :through => :artist_song

Можно ли при активной записи выбрать следующий набор записей:

  • Найти альбом, который принадлежитисполнитель

Поскольку исполнители привязаны к песням, а альбомы представляют собой только наборы песен, и между исполнителем и альбомом нет прямой связи.

А также выбор каждого изпесни принадлежат каждому из альбомов для рассматриваемого исполнителя

По сути что-то на этот счет:

SELECT albums.`name`
FROM artists INNER JOIN artist_songs ON artists.id = artist_songs.artist_id
     INNER JOIN songs ON songs.id = artist_songs.song_id
     INNER JOIN albums ON songs.album_id = albums.id

1 Ответ

0 голосов
/ 08 февраля 2012

Вам не хватает модели ArtistSong? И обычно мы используем множественное число в has_many, т.е. has_many :artist_songs.

Если у вас есть модель соединения ArtistAlbum, вам не нужно переходить к части Song ... Просто artist.albums, если у вас есть следующие настройки:

class Artist < ActiveRecord::Base
  has_many :artist_albums
  has_many :albums, :through => :artist_albums
end

Вот что вы можете использовать, но не обязательно.

class ArtistAlbum < ActiveRecord::Base
  belongs_to :artist
  belongs_to :album
end

class Album < ActiveRecord::Base
  has_many :artist_albums
  has_many :artist, :through => :artist_albums
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...