Frage

Ich habe vier Modellklassen:

class Group < ActiveRecord::Base
  has_many :projects
  has_many :personal_blogs
end

class Project < ActiveRecord::Base
  has_many :events, :as => :event_producer
end

class PersonalBlog < ActiveRecord::Base
  has_many :events, :as => :event_producer
end

class Event < ActiveRecord::Base
  belongs_to :event_producer, :polymorphic => true
end

Ich möchte alle Ereignisse für eine bestimmte Gruppe finden. Ich denke, dies ist ein HASMANY: Durch Assoziation, aber wie kann ich einen HASMANY in der Gruppe festlegen, das alle Ereignisse in den Projekten findet oder Personal_blogs einer Gruppe? Ich könnte natürlich zwei Assoziationen angeben und die Ergebnisse verkettet, aber dann muss ich in Ruby neu sortieren, limitieren, Zustanden usw. Ich würde dies gerne in Activerecord tun, um einen solchen Albtraum zu vermeiden.

Keine korrekte Lösung

Andere Tipps

Sie können eine Methode in der Gruppenklasse wie als nächstes definieren:

class Group < ActiveRecord::Base
  has_many :projects
  has_many :personal_blogs

  def events
    Event.find(:all, :conditions => ['(type = ? AND event_producer_id IN (?)) OR (type = ? AND event_producer IN (?))', 'project', project_ids, 'personal_blog', personal_blog_ids])
  end
end

Wenn Sie SQL wie das vorherige nicht mögen, ist es immer möglich, eine einzelne Tabellenvererbung zu verwenden. Diese Lösung hängt von Ihrem ab Klassenattribute und Verhalten, aber ermöglicht es Ihnen, einen "Has_Many durch" Association zu verwenden.

Warum nicht einfach:

class Group < ActiveRecord::Base
  has_many :projects
  has_many :personal_blogs

  def all_events
    projects.events + personal_blogs.events
  end
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top