Я моделирую отношения между Песней и Исполнителем так:
class Song < ActiveRecord::Base
# Relationships
has_many :releases
has_many :artists, :through => :releases
has_many :featured_artists, :through => :releases,
:class_name => "Artist",
:source => :artist,
:conditions => { :releases => { :featured => true } }
end
class Artist < ActiveRecord::Base
# Relationships
has_many :releases
has_many :songs, :through => :releases
has_many :featured_songs, :through => :releases,
:class_name => "Song",
:source => :song,
:conditions => { :releases => { :featured => true } }
end
class Release < ActiveRecord::Base
# Relationships
belongs_to :artist
belongs_to :song
# Class methods
def self.featured?
self.featured == true
end
end
Это успешно поддерживает концепцию, что у Песни может быть много Исполнителей; некоторые из которых «представлены» в песне. (Думай как рэп песни)
Проблема в том, что я не знаю, как получить доступ к ОДНОМУ исполнителю, у которого есть: featured => false (я считаю, что это «основной исполнитель» песни).
Мне бы хотелось добавить что-то похожее на это в моей модели песни:
has_one :artist, :through => :releases,
:class_name => "Artist",
:source => :artist,
:conditions => { :releases => { :featured => false } }
Это, очевидно, не работает, но кажется правильной идеей - я мог бы установить / получить этого исполнителя на основе модели объединения релизов, имеющей: featured => false.
Есть идеи?
Спасибо!