has_many:2つの異なる協会を通じて協会を通じて
-
23-09-2019 - |
質問
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
所属していません StackOverflow