質問

4つのモデルクラスがあります。

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

特定のグループのすべてのイベントを見つけたいです。私はこれがhas_many:spur associationですが、プロジェクト内のすべてのイベントを見つけるグループでhas_manyを指定するにはどうすればよいですか また グループのPersonal_Blogs?もちろん、2つの関連付けを指定して結果を連結することもできますが、Rubyで再ソート、制限、条件などが必要です。これは、多くのイベントでパフォーマンスの悪夢になる可能性があります。そのような悪夢を避けるために、ActivereCord内でこれをしたいと思います。

正しい解決策はありません

他のヒント

次のようなグループクラスでメソッドを定義できます。

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

以前のようなSQLが気に入らない場合は、単一のテーブル継承を常に使用することが可能です。このソリューションはあなたに依存します クラスの属性と動作, 、しかし、「has_many sull」協会を使用することができます。

なぜしないでください:

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

  def all_events
    projects.events + personal_blogs.events
  end
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top