has_many:通过两个不同的关联通过关联
-
23-09-2019 - |
题
我有四个模型类:
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:通过关联,但是如何在小组上指定一个has_many,以查找项目中的所有事件 或者 一个小组的个人_BLOG?当然,我可以指定两个关联并串联结果,但随后我必须重新分配,限制,状况等。在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”。
为什么不这样做:
class Group < ActiveRecord::Base
has_many :projects
has_many :personal_blogs
def all_events
projects.events + personal_blogs.events
end
end
不隶属于 StackOverflow