我有四个模型类:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top