Проблема доступа к данным через модель соединения, основанную на одном атрибуте фильтрации - PullRequest
0 голосов
/ 08 сентября 2011

Я моделирую отношения между Песней и Исполнителем так:

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.

Есть идеи?

Спасибо!

...